我很确定我在某个地方看过这个,但我现在找不到文档。如果我在同一beforeEach
块中有两个describe
块,是否保证按顺序运行? IE:
describe("foo", function(){
beforeEach(function(){
print("I'm always first!");
}
beforeEach(function(){
print("I'm always second!");
}
}
答案 0 :(得分:2)
如果你看一下Suite.js中Jasmine的源代码,它会按照与添加它们相反的顺序添加它们。
Suite.prototype.beforeEach = function(fn) {
this.beforeFns.unshift(fn);
};
然后在Env.js中你可以看到它们在运行之前它们是相反的:
var beforeAndAfterFns = function(suite) {
return function() {
var befores = [],
afters = [];
while(suite) {
befores = befores.concat(suite.beforeFns);
afters = afters.concat(suite.afterFns);
suite = suite.parentSuite;
}
return {
befores: befores.reverse(),
afters: afters
};
};
};
因为整个时间都保存在Array中,我会说是的,它们一直是按顺序执行的。
答案 1 :(得分:1)
来自http://jasmine.github.io/2.0/introduction.html
可以嵌套调用描述,并在任何级别定义规范。这允许将套件组合为功能树。 在执行规范之前,Jasmine按顺序执行每个beforeEach函数执行的树。执行规范后,Jasmine同样会遍历afterEach函数。
以下是我当前应用的示例代码。
nodeApp
是主要模块
describe("\n\nuser registration form testing", function() {
beforeEach(module("views/createuser/createuser.html"), function() {
});
describe("\n\nUser createtion form should have valid data", function() {
beforeEach(module("nodeApp"));
beforeEach(inject(function($rootScope, $compile, $controller, $templateCache) {
}))
});
});
如果我将beforeEach(module("nodeApp"));
放在second beforeEach
之后
它抛出一个错误。因为nodeApp
是负责注入所有服务的模块。
因此,稍后它可以在第二个beforeEach