【发布时间】:2016-08-24 09:51:26
【问题描述】:
由于使用 Mocha 超时,我的测试失败了。 我确实调用了“done()”函数,但由于某种原因它似乎不起作用。
我的测试目前看起来像这样:
var express = require('express');
var expect = require('chai').expect;
var mocha = require('mocha');
var calendar = require('./../Server/calendarDatabase');
describe("Calendar", function () {
describe("Database", function () {
it("should get stuff from the database", function (done) {
return calendar.Connect()
.then(function () {
return calendar.getAll();
})
.then(function (returnValue) {
expect(returnValue.count).to.equal(5); //This should fail, my database records are 20+
done();
});
});
});
});
我的calendar.Connect() 和calendar.getAll() 都是承诺:
var express = require('express');
var sql = require('mssql');
var config = require('./../config');
var calendarDbConnection = {};
calendarDbConnection.Connect = function() {
return sql.connect(config.mssql);
}
calendarDbConnection.getAll = function () {
var promise = new sql.Request()
.query('select * from CalendarTable')
.catch(function (err) {
console.log(err.message);
});
return promise;
}
module.exports = calendarDbConnection;
但是,在运行测试时,我得到以下输出:
当我在最后一个then() 之后调用done() 时,函数得到了解决,但我的测试结果却没有。我从数据库中获取的行数超过 20,我检查它们是否等于 5。所以,我的测试应该失败,但它没有。
//previous code
.then(function (returnValue) {
expect(returnValue.count).to.equal(5); //This should fail, my database records are 20+
});
done();
//...
所以最后一个结果通过了我的测试,但它不应该。
我在这里缺少什么?我正在调用回调函数,但我的预期结果不正确。
【问题讨论】:
-
您没有捕获任何抛出的错误。在链尾添加
.catch? -
更新了我的问题,这可行,但在这种情况下我的测试通过了。我认为
expect会使该测试自行失败,而无需使用所需的 catch 块。 -
找到了!如果我抓住了我的
done本身,它就会像我预期的那样与断言一起工作。即then(....) { ... done(); }.catch(done);感谢您的帮助,请随时将其发布为我接受的答案。 -
如果要增加
timeout,可以使用timeout(10000) -
请不要编辑问题中的解决方案。解决方案必须作为答案发布。
标签: javascript node.js promise mocha.js