Я практикую тестирование с Jest, в частности, функции насмешки.
Я тестирую функцию, которая возвращает удвоенный параметр. Я тестирую эту функцию, высмеивая ее и сопоставляя несколько параметров.
вот функция, которую я тестирую, она находится в файле ("./mock-func.js"):
function doubling(n) {
return n * 2;
}
exports.module = doubling;
вот test (в другом файле):
const mockFunc = require("./mock-func.js");
mockFunc.doubling = jest.fn();
test("map calls functions correctly", () => {
const a = [10, 20, 30];
a.map(mockFunc.doubling);
expect(mockFunc.doubling.mock.calls.length).toBe(3);
expect(mockFunc.doubling.mock.calls[0]).toEqual([10, 0, a]);
expect(mockFunc.doubling.mock.calls[1]).toEqual([20, 1, a]);
expect(mockFunc.doubling.mock.calls[2]).toEqual([30, 2, a]);
expect(mockFunc.doubling.mock.results[0].value).toBe(20);
expect(mockFunc.doubling.mock.results[1].value).toBe(40);
expect(mockFunc.doubling.mock.results[2].value).toBe(60);
});
проблема, которая у меня есть, состоит в том, что тест проходит для ложных вызовов, но не для значений результатов. Это означает, что он возвращает неопределенное значение, когда ожидаемые значения равны 20, 40, 60. Я не могу понять, почему фиктивные вызовы проходят, но не значения результатов.
Я подозреваю, что это потому, что функция находится в другом модуле, потому что тест пройден, если я определю функцию в тесте следующим образом:
const myMockFn = jest.fn(n => n * 2);
test("map calls functions correctly", () => {
const a = [10, 20, 30];
a.map(myMockFn);
expect(myMockFn.mock.calls.length).toBe(3);
expect(myMockFn.mock.calls[0]).toEqual([10, 0, a]);
expect(myMockFn.mock.calls[1]).toEqual([20, 1, a]);
expect(myMockFn.mock.calls[2]).toEqual([30, 2, a]);
expect(myMockFn.mock.results[0].value).toBe(20);
expect(myMockFn.mock.results[1].value).toBe(40);
expect(myMockFn.mock.results[2].value).toBe(60);
});
любая помощь / обратная связь будет принята с благодарностью! спасибо!