Я пишу несколько тестов для простого модуля node.js, который возвращает результат другой функции, в настоящее время этот модуль выглядит следующим образом:
const doAPostRequest = require('./doAPostRequest.js').doAPostRequest
const normalizeResponse = require('./normalizeResponse.js').normalizeResponse
const errorObject = require('./responseObjects.js').errorObject
const successObject = require('./responseObjects.js').successObject
exports.handlePost = (postData) => {
return doAPostRequest(postData).then((res) => {
const normalizedResponse = normalizeResponse(res);
return successObject(normalizedResponse);
}).catch((error) => {
const { statusCode, message } = error;
return errorObject(statusCode, message);
});
}
doAPostRequest
- это еще один модуль, который возвращает обещание. Теперь я хочу проверить следующие случаи:
- , если
doAPostRequest
вызывается один раз с параметрами, указанными для handlePost
.
- is
normalizeResponse
вызывается один раз с параметрами, возвращаемыми из doAPostRequest
.
- is
successObject
вызывается один раз с параметрами, возвращаемыми из normalizedResponse
.
- is
errorObject
вызывается один раз с параметрами, возвращаемыми из doAPostRequest
(если есть ошибка).
Но я не могу понять, как я могу проверить, вызываются ли функции в обещании, и если вначале вызывается doAPostRequest
.
В настоящее время у меня есть следующий набор тестов для модуля, написанный с помощью библиотек Chai, Sinon и Sinon-chai.
const sinon = require('sinon');
const chai = require('chai');
const handlePost = require('./handlePost.js').handlePost
const params = { body: 'title': 'foo' }
chai.use(require('sinon-chai'));
it('Calls doAPostRequest', () => {
doAPostRequest = sinon.stub().resolves("Item inserted")
handlePost(params)
expect(doAPostRequest).to.have.been.calledOnce;
expect(doAPostRequest).to.have.been.calledWith(params);
});
it('Calls normalizeResponse', () => {
normalizeResponse = sinon.stub().resolves("result")
return handlePost(params).then((res) => {
expect(normalizeResponse).to.have.been.calledOnce;
expect(normalizeResponse).to.have.been.calledWith("Item inserted");
});
});
Однако тесты завершаются неудачно со следующей ошибкой:
AssertionError: expected stub to have been called exactly once, but it was called 0 times
Может быть, я что-то упускаю, и это не правильный способ проверить этот кусок кода? Я нашел эту тему, и проблема близка к идентичной, однако для меня ни одна из функций не вызывается, по-видимому. Это заставляет меня думать, что я должен что-то упустить. Будем благодарны за любую помощь и / или предложения.