茉莉花异步测试
Jasmine Async Testing
我正在尝试使用 Jasmine 2 的新 done()
回调测试异步设置的值。
我的测试基于 Jasmine 在其文档 (http://jasmine.github.io/2.0/upgrading.html#section-Asynchronous_Specs) 中给出的示例:
it('can set a flag after a delay', function(done) {
var flag = false,
setFlag = function() {
//set the flag after a delay
setTimeout(function() {
flag = true;
done();
}, 100);
};
setFlag();
expect(flag).toBe(true);
});
我正在获取结果 "Expected false to be true",所以我猜测它没有等待 done() 回调被调用,然后才检查标志的值。
有谁知道为什么这个测试失败了?
谢谢!
这是因为您在 setTimeout
被调用后立即 运行 断言,因此您没有给它足够的时间来调用将标志设置为 true 的回调。下面的代码将起作用(运行 下面的代码位于 TryJasmine 以查看其行为方式):
describe('flag delays', function () {
it('can set a flag after a delay', function(done) {
var flag = false,
setFlag = function() {
//set the flag after a delay
setTimeout(function() {
flag = true;
expect(flag).toBe(true);
done();
}, 100);
};
setFlag();
});
});
展望未来,Jasmine 有一个 waitsFor
method to facilitate testing timers. Even better, Sinon.JS provides functionality for faking times,可以跳过 setTimeout
调用并验证任何行为,而无需在测试中创建基于持续时间的依赖项。此外,您将能够像在问题中所做的那样在测试结束时编写断言,这将大大提高可读性。
我正在尝试使用 Jasmine 2 的新 done()
回调测试异步设置的值。
我的测试基于 Jasmine 在其文档 (http://jasmine.github.io/2.0/upgrading.html#section-Asynchronous_Specs) 中给出的示例:
it('can set a flag after a delay', function(done) {
var flag = false,
setFlag = function() {
//set the flag after a delay
setTimeout(function() {
flag = true;
done();
}, 100);
};
setFlag();
expect(flag).toBe(true);
});
我正在获取结果 "Expected false to be true",所以我猜测它没有等待 done() 回调被调用,然后才检查标志的值。
有谁知道为什么这个测试失败了?
谢谢!
这是因为您在 setTimeout
被调用后立即 运行 断言,因此您没有给它足够的时间来调用将标志设置为 true 的回调。下面的代码将起作用(运行 下面的代码位于 TryJasmine 以查看其行为方式):
describe('flag delays', function () {
it('can set a flag after a delay', function(done) {
var flag = false,
setFlag = function() {
//set the flag after a delay
setTimeout(function() {
flag = true;
expect(flag).toBe(true);
done();
}, 100);
};
setFlag();
});
});
展望未来,Jasmine 有一个 waitsFor
method to facilitate testing timers. Even better, Sinon.JS provides functionality for faking times,可以跳过 setTimeout
调用并验证任何行为,而无需在测试中创建基于持续时间的依赖项。此外,您将能够像在问题中所做的那样在测试结束时编写断言,这将大大提高可读性。