我正在学习使用Jasmine进行测试,我正在寻找async
测试的一些说明以进一步理解。
在以下代码中,第一个规范中的测试有效,但第二个版本我已删除了beforeEach
并将异步调用移到了it
中。
describe("Working Asnc", function() {
var value = 0;
function funcRunInBackground() {
value = 1;
};
function wrapFuncRunInBackground(done) {
setTimeout(function() {
funcRunInBackground();
done();
}, 2000);
}
beforeEach(function(done) {
wrapFuncRunInBackground(done);
});
it("should be greater than 0", function() {
expect(value).toBeGreaterThan(0);
});
});
描述("不工作Asnc",function(){ var value = 0;
function funcRunInBackground() {
value = 1;
};
function wrapFuncRunInBackground(done) {
setTimeout(function() {
funcRunInBackground();
done();
}, 2000);
}
it("should be greater than 0", function(done) {
wrapFuncRunInBackground(done);
expect(value).toBeGreaterThan(0);
});
});
如果需要,我们可以使用测试本身进行asnc操作吗?
答案 0 :(得分:1)
变化
it("should be greater than 0", function(done) {
wrapFuncRunInBackground(done);
expect(value).toBeGreaterThan(0);
});
到
it("should be greater than 0", function(done) {
wrapFuncRunInBackground(function() {
expect(value).toBeGreaterThan(0);
done();
});
});
回调不会暂停执行,因此在原始代码段中没有任何内容阻止expect(...)
调用在调用wrapFuncRunInBackground
的异步回调之前运行。
done
不是魔术,它只是一个正常的函数,它将测试标记为在调用时完成...
答案 1 :(得分:1)
您无法以这种方式同步js异步代码。您不能等待在不使用zallbacks / promises / co + generators / etc的情况下执行异步代码。 在你的情况下,它应该是这样的:
it("should be greater than 0", function(done) {
wrapFuncRunInBackground(function(){
expect(value).toBeGreaterThan(0);
done();
});
});