我正在使用Mocha来测试我创建的一些数据库查询。我需要在block
之前创建适当的外键,以便单元测试可以专注于测试我的Node ORM的原始创建/删除功能。
我的问题是我在before
块中插入数据库条目,并且在before
块执行完毕之前单元测试正在运行。
I read that promises should be used to deal有这种事情,所以我重构了我的代码库以使用promises但我仍然无法解决我需要setTimeout这一事实。
如何执行异步before
阻止而无需在it
中包装我的第一个setTimeout
块?
var chai = require('chai');
var expect = chai.expect;
var db = require('../server/db/config');
var models = require('../server/db/models');
describe('scoring', function() {
var testMessage = {
x: 37.783599,
y: -122.408974,
z: 69,
message: 'Brooks was here'
};
var messageId = 1;
before(function() {
var token = '' + Math.random();
models.createUser(token).then(function() {
testMessage.userToken = token;
models.insert(testMessage)
});
});
it('should have votes created in db when createVote is called', function(done) {
setTimeout(function(done) {
models.createVote(messageId, token, function(err, res) {
expect(res.insertId).to.be.a('number');
done();
});
}.bind(this, done), 1000);
});
});
答案 0 :(得分:1)
与其他Mocha API方法一样,您传递给before
的函数可以接受done
回调。您应该在before
操作完成后调用此方法:
before(function(done) {
var token = '' + Math.random();
models.createUser(token).then(function() {
testMessage.userToken = token;
return models.insert(testMessage)
}).then(function() {
done();
})
});