Я пытаюсь понять, как лучше всего подойти к варианту использования в шутку.
Я не хочу издеваться над функцией, просто шпионю за ней и позволяю оригинальной реализации делать свою работу. Допустим, я хочу отследить, сколько раз запрос вызывался в драйвере 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
или что-то подобное.
Любая обратная связь приветствуется.
Это отслеживается как часть #1679.
Возможно, это неверно, но разве expect.spyOn
не отличается от жасмина spyOn
тем, что не выполняет заявленное «автоматическое восстановление» в конце теста? Я думаю, что эта функция довольно удобна и очищает файлы спецификаций. Планируется ли добавление такого функционала при интеграции #1679?
См. также #2534.
Самый полезный комментарий
Возможно, это неверно, но разве
expect.spyOn
не отличается от жасминаspyOn
тем, что не выполняет заявленное «автоматическое восстановление» в конце теста? Я думаю, что эта функция довольно удобна и очищает файлы спецификаций. Планируется ли добавление такого функционала при интеграции #1679?