Как проверить, вызывалась ли функция с определенными параметрами (toHaveBeenCalledWith) с помощью Jest
Я хочу проверить, была ли вызвана конкретная функция в моем тесте и с правильными параметрами. Из шутливой документации я не могу понять, как это правильно сделать.
предположим, у меня есть что-то вроде этого:
// add.js
function child(ch) {
const t = ch + 1;
// no return value here. Function has some other "side effect"
}
function main(a) {
if (a == 2) {
child(a + 2);
}
return a + 1;
}
exports.main = main;
exports.child = child;
теперь в модульном тесте:
1.
Я хочу бежать main(1)
и проверьте, что он вернулся 2
и child()
не называлась.
2.
И тогда я хочу бежать main(2)
и то, что он вернулся 3
и child(4)
был вызван ровно один раз.
у меня сейчас что-то вроде этого:
// add-spec.js
module = require('./add');
describe('main', () => {
it('should add one and not call child Fn', () => {
expect(module.main(1)).toBe(2);
// TODO: child() was not called
});
it('should add one andcall child Fn', () => {
expect(module.main(2)).toBe(3);
// TODO: child() was called with param 4 exactly once
// expect(module.child).toHaveBeenCalledWith(4);
});
});
Я тестирую это в https://repl.it/languages/jest, поэтому рабочий пример в этом REPL будет высоко оценен.
1 ответов
хорошо, я понял. Фокус в том, чтобы разделить функции на отдельные файлы. Таким образом, код (и работает в https://repl.it/languages/jest ):
// add.js
child = require('./child').child;
function main(a) {
if (a == 2) {
child(a + 2);
}
return a + 1;
}
exports.main = main;
извлечен ребенок.файл js:
// child.js
function child(ch) {
const t = ch + 1;
// no return value here. Function has some other "side effect"
}
exports.child = child;
главная тестовый файл:
// add-spec.js
main = require('./add').main;
child = require('./child').child;
child = jest.fn();
describe('main', () => {
it('should add one and not call child Fn', () => {
expect(main(1)).toBe(2);
expect(child).toHaveBeenCalledTimes(0);
});
it('should add one andcall child Fn', () => {
expect(main(2)).toBe(3);
expect(child).toHaveBeenCalledWith(4);
expect(child).toHaveBeenCalledTimes(1);
});
});