end () не является функцией в тесте Node Mocha - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь протестировать некоторые службы моего Nodejs API с помощью mocha:

exports.getModelts = function () {
  return new Promise((resolve, reject) => {
    Modelt.find(function (err, modelts) {
      if (err) {
        return reject(err);
      }
      return resolve(modelts);
    });
  });
}

И тест:

it('returns expected payload', function (done) {
  service
    .getModelts()
    .end(function (err, res) {
      expect(res.body.length).to.eql(6);
      expect(res.body[0].text).to.eql('Todo 1');

      done();
    });
});

Я получаю ошибку:

TypeError: service.getModelts(...).end is not a function

Любая помощь будет признательна.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

.end() является частью supertest, но вы не используете это в своем тесте (или в методе, который вы тестируете).

Вместо этого вы должны проверить внутри .then, потому что ваш метод возвращает Promise:

it('returns expected payload', function() {
  return service
    .getModelts()
    .then(function(res) {
      // I expect that the following tests will fail,
      // because they assume that `res` is a `supertest`
      // response, and your method returns a Mongoose
      // query result
      expect(res.body.length).to.eql(6);
      expect(res.body[0].text).to.eql('Todo 1');
    });
});

(также обратите внимание, как тестовая функция возвращает цепочку Promise и не использует done; это потому, что Mocha поддерживает обещания из коробки, а смешивание обещаний с обратными вызовами может вызвать проблемы) .

0 голосов
/ 07 ноября 2018

Насколько я могу судить, end не является частью nodeJS, Mocha или Promise API - откуда берется .end - используете ли вы какие-либо другие фреймворки? Если это так - возможно, ваш тест не импортирует фреймворк, содержащий .end

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...