我有一个测试失败,因为使用摩卡超时。 我确实称之为“完成()”功能,但由于某种原因似乎不起作用。嵌套承诺 - 摩卡 - 超时超时
我的测试目前看起来是这样的:
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'? – CodingIntrigue
更新了我的问题,这有效,但我的测试通过了这种情况。我认为'期望'会让这个测试本身失败,没有必要的catch块。 – Tikkes
找到了!如果我自己抓住了我的“完成”,它就会像我所期望的那样符合断言。即“then(....){... done(); } .catch(done);'谢谢你的帮助,随时张贴这个答案让我接受。 – Tikkes