#node.js #unit-testing #testing #jestjs
#node.js #модульное тестирование #тестирование #jestjs
Вопрос:
Я хотел бы издеваться над функцией, которая вызывается другой функцией с использованием jest, но она не работает. Имитирующая функция никогда не вызывается родительской функцией.
app.js
const evaluate = (a, b) => {
return 'Sum is ' add(a, b);
}
const add = (a, b) => {
return a b;
}
exports.evaluate = evaluate;
exports.add = add;
test.js
const evaluateService = require("./app");
describe('Call jumpRequest', () => {
it('should return Evaluate', async () => {
evaluateService.add = jest.fn().mockReturnValue(12);
const res = await evaluateService.evaluate(5, 3);
expect(res).toEqual("Sum is 12");
})
})
Комментарии:
1. Не издевайтесь над этим, это часть того же модуля. Если она достаточно сложна, чтобы на самом деле нуждаться в отдельном тестировании (я бы сказал, не в этом случае), извлеките ее в отдельный модуль.
2. Спасибо, итак, вот абстракция для того, что я хочу сделать, но если я не могу изолировать функцию для ее тестирования даже в том же модуле, в чем интересы test. Действительно, иногда мне нужно изолировать и протестировать функцию от других из-за нескольких вызовов цепочки функций.
3. Возможно, пример не является репрезентативным, но я бы все же дал тот же совет — извлеките соавторов для замены на тестовые дубли, но внутреннее повторное использование функций (и, следовательно, рефакторинг в пределах границы модуля) не должно включать mocks.
4. Пожалуйста, есть ли у вас какие-либо ресурсы (ссылки, название книги или что-то еще), чтобы глубоко изучить ваши советы и понять, как правильно тестировать, потому что на YouTube и в Интернете многие люди так тестируют.
5. Изменить
return 'Sum is ' add(a, b);
наreturn 'Sum is ' exports.add(a, b);