Я читал и пробовал много способов сделать это, у меня есть модуль, как показано ниже.
//echo.js
module.exports = (services, request) => {
logger.debug('excecuting');
return true;
};
Я хочу написать модульный тест для этого модуля, используя sinon, что я пробовал до сих пор.
describe('test', function() {
const echo1 = require('./echo');
var spy1 = sinon.spy(echo1);
beforeEach(() => {
spy1.resetHistory();
});
it('Is function echo called once - true ', done => {
echo1(testData.mockService, testData.stubRequest); //calling module
spy1.called.should.be.true;
done();
});
});
Я получаю приведенный ниже результат, который не удался, хотя я вижу, что моя функция вызывается в окне вывода
1) test
Is function echo called once - true :
AssertionError: expected false to be true
+ expected - actual
-false
+true
at Context.done (echo_unit.js:84:27)
может ли кто-нибудь сказать мне, как тестировать модули в nodejs





В этом случае не имеет значения, модуль это или просто функция.
Функция, которая не вызывается как метод, не может быть отслежена (кроме того, функция describe не является подходящим местом для размещения var spy1 = sinon.spy(echo1)). Здесь это также не нужно, потому что это вы вызываете функцию, нет необходимости проверять, что она была вызвана.
Поскольку все, что делает echo, это вызывает logger.debug и возвращает true, это необходимо проверить:
it('Is function echo called once - true ', () => {
sinon.spy(logger, 'debug');
const result = echo1(testData.mockService, testData.stubRequest);
expect(logger.debug).to.have.been.calledWith("execute");
expect(result).to.be(true);
// the test is synchronous, no done() is needed
});