Jest onSpy - ожидаемая фиктивная функция была вызвана
Я борюсь с использованием spyOn как часть тестирования моего модуля utils.js. Я пробовал различные методы и подходы, но все, кажется, дают "ожидаемую вызывающую функцию, которая была вызвана". Для записи, другие модульные тесты работают хорошо, поэтому не должно быть никаких проблем с моей реальной настройкой теста.
Ниже приведен упрощенный тестовый пример с двумя функциями и одним тестом, и я даже не могу заставить их работать. Неужели я вообще не понял шпиона?
// utils.js
function capitalHelper(string){
return string.toUpperCase();
}
function getCapitalName(inputString){
return capitalHelper(inputString.charAt(0)) + inputString.slice(1);
}
exports.capitalHelper = capitalHelper
exports.getCapitalName = getCapitalName
// utils.test.js
const Utils = require('./utils');
test('helper function was called', () => {
const capitalHelperSpy = jest.spyOn(Utils, 'capitalHelper');
const newString = Utils.getCapitalName('john');
expect(Utils.capitalHelper).toHaveBeenCalled();
})
1 ответ
Я не использую spyOn(), но вместо этого jest.fn() для всех ложных сценариев
В вашем случае я бы сделал следующее
test('helper function was called', () => {
Utils.capitalHelper = jest.fn((s) => Utils.capitalHelper(s))
const newString = Utils.getCapitalName('john')
expect(Utils.capitalHelper.mock.calls.length).toBe(1)
})
Первая строка могла бы быть просто:
Utils.capitalHelper = jest.fn()
так как вы, кажется, не проверяете возвращенное значение в вашем тесте:)
Вы можете найти более подробную информацию о jest.fn() в официальной документации jest: https://facebook.github.io/jest/docs/en/mock-functions.html
----------------------- РЕДАКТИРОВАТЬ
Я понял: проблема возникает из-за того, что в вашем файле utils.js getCapitalName использует определенную функцию, а не ту, на которую указывает экспорт.
Чтобы иметь возможность имитировать используемую функцию, вы можете изменить файл utils.js на
// utils.js
const Utils = {
capitalHelper: string => string.toUpperCase(),
getCapitalName: inputString => Utils.capitalHelper(inputString.charAt(0)) + inputString.slice(1)
}
export default Utils
тогда тесты, которые я дал прежде, будут работать