因为摩卡咖啡超时,我的测试失败了。
我确实调用了“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();
});
});
});
});
其中my
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;
但是,在运行测试时,我得到以下输出:
当我在上一次
done()
之后调用then()
时,函数得到解析,但测试结果没有。我从数据库中得到的行数超过20,我检查它们是否等于5。所以,我的测试应该会失败,但不会。//previous code
.then(function (returnValue) {
expect(returnValue.count).to.equal(5); //This should fail, my database records are 20+
});
done();
//...
所以最后一个结果通过了我的测试,但不应该。
我错过了什么?我正在调用回调函数,但是预期的结果不正确。
最佳答案
因为您从测试返回了一个承诺,所以您将should not作为参数通过done
:
或者,您可以返回一个promise,而不是使用done()回调。如果您正在测试的api返回承诺而不是接受回调,那么这将非常有用。
尽管您可以将done
传递到catch
调用,但摆脱done
并返回一个承诺似乎更方便。
it("should get stuff from the database", function () {
return calendar.Connect() // returns Promise, so no `done`
.then(function () {
return calendar.getAll();
})
.then(function (returnValue) {
expect(returnValue.count).to.equal(5);
});
});