#typescript #unit-testing #jestjs
#typescript #модульное тестирование #jestjs
Вопрос:
У меня есть класс, который я пытаюсь протестировать, который в шутку выполняет последовательность вызовов фиктивной функции:
У меня есть макет для Gpio
конструктора класса, который создает экземпляры объектов за этими свойствами. Макет класса имеет макет метода для digitalWrite
:
И когда я запускаю свой тест, я вижу последовательность вызовов digitalWrite:
Но я не могу понять, как проверить правильность последовательности. Мне кажется, что если я увижу последовательность в подсказке test fail, я смогу сказать «вызовите сначала с 0, затем с 0, затем с 1», но я не совсем понимаю, как это сделать. Есть идеи?
Также, чтобы на это не указывали: Я знаю, что технически каждый из экземпляров pin-кода должен быть отдельным, и я должен иметь возможность тестировать их по отдельности, но из-за того, как вы издеваетесь над конструкторами в шутку, я должен использовать одну и ту же фиктивную функцию для digitalWrite
.
Ответ №1:
Вы можете использовать jest .toHaveBeenNthCalledWith()
например
it('should be called in the following sequence', () => {
expect(......digitalWrite).toHaveBeenNthCalledWith(1, 0)
expect(......digitalWrite).toHaveBeenNthCalledWith(2, 0)
expect(......digitalWrite).toHaveBeenNthCalledWith(3, 1)
})
или вы можете использовать свойство mock.calls макетной функции:
it('should be called in the following sequence', () => {
expect(......digitalWrite).toHaveProperty('mock.calls', [
[0], [0], [1]
])
})
Комментарии:
1. О, здорово!! Да, это работает отлично. Полезно знать о втором варианте, похоже, что это сделает этот тест более читаемым. Спасибо!!