所有
我刚开始关于Jasmine的第二天研究,有一个关于exe命令的问题我想弄明白:
这个例子来自Jasmine 2.0的介绍: Jasmine 2.0 Introduction
describe("Asynchronous specs", function() {
var value;
beforeEach(function(done) {
setTimeout(function() {
value = 0;
done();
}, 1);
});
it("should support async execution of test preparation and expectations", function(done) {
value++;
expect(value).toBeGreaterThan(0);
done();
});
describe("long asynchronous specs", function() {
var originalTimeout;
beforeEach(function() {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
});
it("takes a long time", function(done) {
setTimeout(function() {
done();
}, 9000);
});
afterEach(function() {
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});
});
});
我试过阅读源代码,但这只会让我更加困惑,甚至会混淆我不理解的部分...... ToT
任何人都可以简单地解释一下茉莉花在遇到之前描述了什么,以及它如何运行以及它是如何运行的?
由于
答案 0 :(得分:3)
describe
就像一个“测试范围”,它用于确定在{All}之前,之后,之前和之后必须执行的it
,它还可以简单地用于对测试进行分类因为它有点像“章节”,带有标题。
第一个beforeEach
在第一个it
(以及describe
个孩子)中的每个describe
之前执行。
第一个it
可以在没有done参数的情况下编写,因为它只包含同步操作。
然后“child”beforeEach
中的describe
在每个测试用例内部执行,然后it
内部,最后afterEach
仅在每个测试用例之后执行it
在孩子内部describe
。
总结一下,在你的例子中,函数按以下顺序执行:
beforeEach1 > it1 > beforeEach1 > beforeEach2 > it2 > afterEach
当你传递done参数时,jasmine“等待”它的执行以继续下一个测试用例(it
)。正如您在上一个案例中所看到的,jasmine必须等待9000ms才能执行done()
:默认情况下,5000毫秒后的茉莉花超时,这就是我们将其更改为10000的原因。
我希望很清楚,如果还不够,请随时询问详情:)