我正在使用done处理Jasmine中的异步代码。它的功能是等到beforeAll
完成但描述函数没有等待......
这是我的代码。
describe("xyz", function(){
var d;
beforeAll(function(done){
$.getJSON( "path/abc.json", function( data ) {
d = data;
done();
});
});
describe("some scenario", function(){
// d value is undefined here
it("spec1", function(){
// it is waiting until beforeAll function is done
expect().toBe();
});
it("spec2", function(){
expect().toBe();
});
});
});
describe("scenario 2", function(){
it("spec3", function(){
expect().toBe();
});
it("spec 4", function(){
expect().toBeGreaterThan();
});
});
});
答案 0 :(得分:0)
试着想象一下如何运行测试。
首先运行描述创建测试套件的函数。 内部套件是函数(beforeAll / Each,after ...)和注册的测试 - 分配给队列。
随后执行西装。
如果您在测试中记录所有功能,则可以看到运行顺序(http://plnkr.co/edit/kxX5TAwHOqRRMFjvE5FZ?p=preview)
describe("xyz", function() {
console.log("describe xyz - start");
var d;
beforeAll(function(done) {
console.log("beforeAll");
setTimeout(function() {
d = 1234;
done()
}, 1000);
});
describe("some scenario", function() {
console.log("describe some scenario - start");
var d2;
// d value is undefined here
beforeEach(function() {
console.log("beforeEach");
d2 = d;
})
it("spec1", function() {
console.log("spec1");
// it is waiting until beforeAll function is done
expect(d).toBe(1234);
});
it("spec2", function() {
console.log("spec2");
expect(d2).toBe(1234);
});
console.log("describe some scenario - end");
});
console.log("describe xyz - end");
});
-
describe xyz - start
describe some scenario - start
describe some scenario - end
describe xyz - end
beforeAll
beforeEach
spec1
beforeEach
spec2
这意味着所有可执行代码都应该在* / after *之前的函数内部。