使用 Jasmine 时,在 beforeAll
块和 beforeEach
块中添加匹配器有区别吗?
据我所知,它是双向的。但是,我在网上找到的每个文档/教程都使用 beforeEach
。这仅仅是因为 Jasmine 的内置 beforeAll
块是一个相对较新的功能,还是由于运行测试时潜在的陷阱而避免了它?
使用 beforeAll
对我来说更有意义(为什么要多次添加相同的匹配器?),但我想确保我的测试不会遇到任何问题。
最佳答案
有两个区别 - 1) 执行顺序,以及 2) 更改持续的范围。我在工作中花了很多时间在 Jasmine 中进行测试,beforeAll
和 beforeEach
之间的差异一直表现得很好(嗯,除了我帮助他们修复的一个 bug)。我发现使用 beforeEach
而不是 beforeAll
的唯一原因是为了避免测试污染。这对于自定义匹配器来说不是问题,因此继续使用 beforeAll
应该没问题。
执行顺序 - 在任何给定的 describe
块中,顺序如下:
beforeAll
beforeEach
it
或 describe
块(包括它们的设置和拆卸) afterEach
it
或 describe
块,重复最后三个步骤 afterAll
我已经通过测试和 this 等来源证实了这一点。
作用域 - this 关键字 spies 或 custom matchers(如上所述)上任何添加的变量、属性将在给定块中、整个块中(包括在嵌套块中)持久且可访问,只要添加它们的代码具有被处决。例如,如果我在
this.foo
的 beforeAll
中设置 describe
,则可以在 describe
的 beforeEach
、 afterEach
、 afterAll
以及 it
和 describe
块中访问它。一旦我离开 describe 块,this.foo
将不再可访问。关于javascript - Jasmine 自定义匹配器和之前,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31682153/