Насмешливая функция внутри другой функции с использованием jest

#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);