node.js - end() 不是 Node Mocha 测试中的函数

标签 node.js testing mocha.js

我正在尝试使用 mocha 测试我的 Nodejs API 的一些服务:

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

如有任何帮助,我们将不胜感激。

提前致谢。

最佳答案

.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 支持开箱即用的 promises,以及混合 promises使用回调可能会导致问题)。

关于node.js - end() 不是 Node Mocha 测试中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53186948/

相关文章:

node.js - 在 Mocha 和 super 测试中保持快速应用程序 session

Node.js nodemailer 错误 - 错误的版本号/无效的问候语

javascript - 更改 Sailsjs 中的 http 请求限制

c# - 模拟从另一个类继承的类

node.js - NODE_ENV 与 Jest

javascript - 在使用 Mocha 和 Babel 进行测试时处理 WebPack CSS 导入

javascript - 如何从子模块访问父方法?

JavaScript - 自调用匿名函数是否充分保护变量免受全局命名空间的影响?

ruby - rspec: 'should_receive' 具有多个参数预期

ruby - 哪里可以详细学习Cucumber?