【问题标题】:Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called;错误:超过 2000 毫秒的超时。对于异步测试和钩子,确保调用了“done()”;
【发布时间】:2019-07-24 11:58:01
【问题描述】:

尝试了 timeout 和 done() 函数来解决这个问题,但它没有显示错误:超过 2000 毫秒的超时。对于异步测试和钩子,确保调用了“done()”;错误。

控制器

var plan_details = require('../../models/plan_details');
module.exports = function () {
return {
    getPlansList: function (request, callback) {
        plan_details.find().sort({ createdAt: -1 }).exec().then((result) => {
            log.info("Getting All Plan Details");
            callback({ status: 200, success: true, result: result });
        }).catch(err => {
            log.error("Getting error while getting all plans");
            log.error(err);
            callback({ status: 400, success: false, message: "Unable to 
            Process your Request" });
        });
    }
 }}

测试用例

var expect = require("chai").expect;
var request = require("request");
var PlanMgmnt = require('../routes/PlanManagement/PlanManagement')();

describe("--Plan Management API", function () {
describe("--Add Plan API", function () {
    it("--returns status 200", function (done) {
        PlanMgmnt.getPlansList({}, function(res){
            console.log(res);
        });
        // done();
    });
});});

它不会在 console.log 中打印 res

【问题讨论】:

  • 你存根plan_details.find()了吗?

标签: node.js unit-testing testing mocha.js chai


【解决方案1】:

找到解决方案,问题是由于 MongoDB 连接,单元测试用例没有得到那里的 MongoDB 连接,因为单元测试用例无法执行 mongoose 函数。

为了解决这个问题,添加了 helper.js 文件,在这个文件中添加了 mongoose 连接代码,在测试命令中使用了 helper.js 文件 "test": "mocha test --require helper.js".

或者也可以使用 mongo-unit 包。

参考:https://www.toptal.com/nodejs/integration-and-e2e-tests-nodejs-mongodb

【讨论】:

    【解决方案2】:

    done() 应按如下方式放入:

    describe("--Add Plan API", function () {
        it("--returns status 200", function (done) {
            PlanMgmnt.getPlansList({}, function(res){
                console.log(res);
                done();
            });
        });
    });
    

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      您可以为每个套件或每个测试设置超时

      describe('suite descripion', function(){
        this.timeout(15000);
      
      it('test description', function(done){
        this.timeout(15000);
      });
      });
      

      【讨论】:

      • 超时不是一个合适的解决方案,我们无法确保测试用例是否正常运行。
      猜你喜欢
      • 2018-07-02
      • 2019-06-24
      • 2020-10-23
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 2019-06-14
      相关资源
      最近更新 更多