我的印象是beforeAll
- 函数会在其内部描述中运行一次。但是,兄弟姐妹描述的似乎可以影响beforeAll
。
可以找到以下测试here
describe("outer Describe", function(){
var testArray;
beforeEach(function(){
testArray = [];
});
describe("First Describe", function(){
beforeEach(function(){
testArray.push({name: "foo"});
});
it("has an item", function(){
expect(testArray.length).toBe(1);//passing
});
});
describe("Second describe", function(){
var arrIsEmptyInBeforeAll;
var arrIsEmptyInBeforeEach;
beforeAll(function(){
arrIsEmptyInBeforeAll = testArray.length === 0;
console.log("testArray should be empty:");
console.log(testArray);//logs array with one item
});
beforeEach(function(){
arrIsEmptyInBeforeEach = testArray.length === 0;
});
it("the arr was empty in before all", function(){
expect(arrIsEmptyInBeforeAll).toBeTruthy(); //This is failing
});
it("the arr was empty in beforeEach", function(){
expect(arrIsEmptyInBeforeEach).toBeTruthy();//Passing
})
})
});
我希望“Second Describe”中的beforeAll
有一个空的testArray
,因为“外部描述”有一个beforeEach
,它将其初始化为一个空数组。但是,在“第二次描述”的beforeAll
中,testArray
在“首先描述”的beforeEach
中添加了一个项目。
这有意义吗?如果是这样,有人可以解释之前应该如何工作。
答案 0 :(得分:2)
注意:您的代码中存在拼写错误;)..但这不是问题。
expect(arrIsEmptyInBeforeAll).toBeTruthy();
简短回答
在Jasmine的 beforeEach 之前总是调用之前的所有,即使有外部 beforeEach 语句。
您的测试按以下方式执行:
(外部测试的迭代)
(内部测试的迭代)