Jest onSpy - ожидаемая фиктивная функция была вызвана - PullRequest
0 голосов
/ 06 июня 2018

Я борюсь с использованием 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 Ответ

0 голосов
/ 06 июня 2018

Я не использую 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)
})

Первая строка может иметь простоbe:

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

тогда тесты, которые я давал раньше, будут работать

...