Дразнить и утверждать вызов функции в обещании - PullRequest
0 голосов
/ 05 января 2019

Я пишу несколько тестов для простого модуля 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 - это еще один модуль, который возвращает обещание. Теперь я хочу проверить следующие случаи:

  1. , если doAPostRequest вызывается один раз с параметрами, указанными для handlePost.
  2. is normalizeResponse вызывается один раз с параметрами, возвращаемыми из doAPostRequest.
  3. is successObject вызывается один раз с параметрами, возвращаемыми из normalizedResponse.
  4. 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

Может быть, я что-то упускаю, и это не правильный способ проверить этот кусок кода? Я нашел эту тему, и проблема близка к идентичной, однако для меня ни одна из функций не вызывается, по-видимому. Это заставляет меня думать, что я должен что-то упустить. Будем благодарны за любую помощь и / или предложения.

...