【发布时间】:2014-05-07 01:10:33
【问题描述】:
我正在编写一个测试来验证模型的创建,然后在描述之后,它会释放所有资源。
我的问题是“done()”被多次调用,原因很明显,但我怎样才能实现这样的功能并且只调用一次呢?两个函数都是异步的!
测试结构和异步调用:
describe('create models', function() {
it('...', function(done) {...});
});
after(function(done) {
dbDestroyCenter('param1','param2')(done);
dbDestroyCenter('param1','param2')(done);
});
删除功能:
function dbDestroyCenter(centerState, centerName) {
return function (done) {
State.findOne({ name: centerState }).exec(function (err, state) {
if (err) return done(err);
expect(state).not.to.be.an('undefined');
Center.destroy({ state: state.id, name: centerName }).exec(function(err) {
if (err) return done(err);
return done();
});
});
};
}
一种可能性是使用来自https://github.com/caolan/async 的 async.parallel,但我不确定 Mocha 是否为此提供解决方案。 有什么想法吗?
【问题讨论】:
-
不,这就是
async这样的东西的设计目的。 Mocha 不会复制该功能(它不需要)。您也可以将第二个dbDestroyCenter调用包装在一个函数中,并使 that 函数回调到第一个dbDestroyCenter而不是完成,但使用async更有效(也更漂亮)。