我在使用简单的异步测试时遇到了一些麻烦。以下代码不会在控制台中抛出任何错误,即使它应该,因为传递给函数的data
不等于0
:
define([
'intern!bdd',
'intern/chai!expect'
], function (bdd, expect) {
with (bdd) {
describe('Test', function () {
it('async test', function(){
var dfd = this.async(2000);
var wait = function(ms) {
setTimeout(function(){
dfd.resolve('test');
}, ms);
return dfd.promise;
};
wait(1500).then(dfd.callback(function (data) {
// data === 'test', so this should fail.
expect(data).to.equal(0);
}), dfd.reject.bind(dfd));
});
});
}
});
我很确定我搞砸了某个地方,因为我从未使用过承诺,但我无法弄清楚在哪里。任何想法都会有所帮助。谢谢!
答案 0 :(得分:1)
您正在为两个不同的异步操作使用相同的Deferred对象并在第一次解析它(=成功测试)。您需要为wait函数创建自己独立的Deferred对象:
define([
'intern!bdd',
'intern/chai!expect',
'intern/node_modules/dojo/Deferred'
], function (bdd, expect, Deferred) {
with (bdd) {
describe('Test', function () {
it('async test', function(){
var dfd = this.async(2000);
var wait = function(ms) {
var waitDfd = new Deferred();
setTimeout(function(){
waitDfd.resolve('test');
}, ms);
return waitDfd.promise;
};
wait(1500).then(dfd.callback(function (data) {
// data === 'test', so this should fail.
expect(data).to.equal(0);
}), dfd.reject.bind(dfd));
});
});
}
});