Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步Mocha测试中出现超时错误_Javascript_Node.js_Mongoose_Mocha.js_Should.js - Fatal编程技术网

Javascript 异步Mocha测试中出现超时错误

Javascript 异步Mocha测试中出现超时错误,javascript,node.js,mongoose,mocha.js,should.js,Javascript,Node.js,Mongoose,Mocha.js,Should.js,我正在使用Mocha和should来测试简单的数据库查询,我正在尝试为简单的Moongose模式函数运行异步测试,但每次都会出现超时错误 Error: timeout of 15000ms exceeded at null.<anonymous> (/usr/local/lib/node_modules/mocha/lib/runnable.js:165:14) at Timer.listOnTimeout [as ontimeout] (timers.js:110:15

我正在使用Mocha和should来测试简单的数据库查询,我正在尝试为简单的Moongose模式函数运行异步测试,但每次都会出现超时错误

  Error: timeout of 15000ms exceeded
  at null.<anonymous> (/usr/local/lib/node_modules/mocha/lib/runnable.js:165:14)
  at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
我的数据:-

   describe('#getFacility()', function () {
    this.timeout(15000);
    it('should get facility successfully', function (done) {
        db.getFacilites(Data.testFacility, function (err, facilities) {
            if (err) throw err;
            facilities.Name.should.equal(Data.testFacility.body.Name);
            done();
        })
    });
});
testFacility : {
    params:  { clientId:"51c85c3267b6fc1553000001" }
},
我的获取功能

getFacilites: function (req, res) {
    Facility.find({Client: req.params.clientId}, function (err, facilities) {
        if(err) {
            res.send(500,err);
        } else if (!facilities) {
            res.send(404, "facilities not found");

        } else if (req.query.format && req.query.format === 'select') {
            var result = facilities.map (function (f) {
                return { value: f._id.toString(), text: f.Name }
            });
            res.json(result);

        } else {
            console.log("Cannot Retrieve Facilities");
        }
    });
}
我甚至还为查询创建了一个新的单独函数,但它仍然不起作用。任何能起作用的想法都是这样的

describe('#getFacility() direct from DB', function () {
    it('should get facility successfully from db', function (done) {
        Client_data.Facility.find({Client: Data.testFacility.params.clientId}, function(err, facilities) {
            if (err) throw (err);
            if (facilities) {
                facilities.forEach(function (f) {
                    console.log(f);
                });
                done();
            }
        });
    });
});
如果我尝试在查询后调用done()回调,测试就会通过,但这看起来也不太好 对我来说


您的getFacility接受一个req、res和next,您在测试中传递的是完全不同的东西(一个testFacility对象和一个回调)


我认为您的getFacilities方法定义不应该使用req、res和next,可能只使用clientId和next,然后根据next的回调,您可以创建适当的响应。

我使用req、res和next,因为此函数是作为对URL的app.get请求的结果调用的<代码>app.get('/api/facility/:clientId',db.getFacilites)@SulemanMirza然后您需要将其作为路由处理程序进行测试,传递(可能是模拟的)
请求
响应
,以及
函数(err)
。或者重构,这样您就有了两个函数——1)用于查询,2)用于路由处理程序——这样第一个(查询)就可以按照预期在测试中使用。感谢您的帮助Jonathan,现在我尝试使用单独的查询函数,但它仍然不起作用。仍然超出超时错误。如果在db查询之后调用done()回调,测试就会通过,但我认为这也是不正确的。
describe('#addFacility()', function () {
    it('should add facility successfully', function (done) {
        API_Calls.addFacility(Data.testFacility, function (doc) {
            doc.Name.should.equal(Data.testFacility.body.Name);
        });
        done();
    });
});