The*_*ter 20 javascript callback mocha.js node.js
在Mochajs中,他们使用"done()"来测试异步代码,如下所示:
describe('User', function() {
describe('#save()', function() {
it('should save without error', function(done) {
var user = new User('Luna');
user.save(function(err) {
if (err) throw err;
done();
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
这究竟是什么意思?我做了console.log(done.toString()),我得到了这个:
function (err) {
if (err instanceof Error || toString.call(err) === '[object Error]') {
return done(err);
}
if (err) {
if (Object.prototype.toString.call(err) === '[object Object]') {
return done(new Error('done() invoked with non-Error: '
+ JSON.stringify(err)));
}
return done(new Error('done() invoked with non-Error: ' + err));
}
done();
}
Run Code Online (Sandbox Code Playgroud)
这里的done()最后是否与第一段代码中的done()不同?
Lou*_*uis 18
Mocha能够处理同步和异步测试.当您运行同步测试时,您可以将其作为匿名函数传递给it您,而您不必执行任何其他操作:Mocha知道测试在函数返回时结束.但是,如果您正在运行异步测试,则必须告诉Mocha测试是异步的.有两种方法可以做到这一点:
声明传递给的匿名函数it接受一个参数.Mocha将使用单个参数调用您的匿名函数,该函数必须调用以指示您的测试结束.(此参数done由于传统而被调用.您可以调用它complete,cb或者platypus它也可以正常工作.)如果您在done没有值的情况下调用,则测试成功.对于值,测试是失败的,值应该是Error从中派生的对象或对象Error.
返回承诺:摩卡将等待承诺得到解决或拒绝.如果已解决,则测试成功.如果被拒绝,则测试失败.
您在执行此操作时看到done.toString()的代码只是Mocha在声明参数时传递给测试的函数的代码.你可以在其中看到我上面提到的一些内容(例如,如果你传递一个参数done应该是一个Error或派生自的Error).其中done还有另一个doneMocha专用的功能.
| 归档时间: |
|
| 查看次数: |
21044 次 |
| 最近记录: |