Jest: шпионская функциональность

Созданный на 20 сент. 2016  ·  3Комментарии  ·  Источник: facebook/jest

Я пытаюсь понять, как лучше всего подойти к варианту использования в шутку.

Я не хочу издеваться над функцией, просто шпионю за ней и позволяю оригинальной реализации делать свою работу. Допустим, я хочу отследить, сколько раз запрос вызывался в драйвере postgres. Работает следующий подход:

const querySpy = pg.Client.prototype.query = jest.fn(pg.Client.prototype.query);
expect(querySpy.mock.calls.length).toBe(2)

Проблема в том, что я также должен назначить исходную реализацию в конце теста, чтобы она не влияла на другие в том же файле. Так что легко нарушить тестовую изоляцию, если один человек забудет такую ​​очистку.

Я также заметил, что у jasmine есть spyOn, который, похоже, тоже работает в шутку (но не задокументирован), что довольно элегантно, так что того же можно добиться:

const querySpy = spyOn(pg.Client.prototype, 'query').and.callThrough();
expect(querySpy.calls.count()).toEqual(3);

И Жасмин утверждает, что автоматически удаляет шпиона после теста, и это здорово.

Но не уверен, что это станет официальной частью шутки? Проблема в том, что жасминовые шпионы имеют другой интерфейс, чем моки в шутку. Поэтому я думаю, что лучше всего было бы просто расширить фиктивную функциональность, чтобы ее можно было легко использовать для шпионажа, используя spyOn или что-то подобное.

Любая обратная связь приветствуется.

Самый полезный комментарий

Возможно, это неверно, но разве expect.spyOn не отличается от жасмина spyOn тем, что не выполняет заявленное «автоматическое восстановление» в конце теста? Я думаю, что эта функция довольно удобна и очищает файлы спецификаций. Планируется ли добавление такого функционала при интеграции #1679?

Все 3 Комментарий

Это отслеживается как часть #1679.

Возможно, это неверно, но разве expect.spyOn не отличается от жасмина spyOn тем, что не выполняет заявленное «автоматическое восстановление» в конце теста? Я думаю, что эта функция довольно удобна и очищает файлы спецификаций. Планируется ли добавление такого функционала при интеграции #1679?

См. также #2534.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги