使用 Jasmine 时,在 beforeAll 块和 beforeEach 块中添加匹配器有区别吗?

据我所知,它是双向的。但是,我在网上找到的每个文档/教程都使用 beforeEach 。这仅仅是因为 Jasmine 的内置 beforeAll 块是一个相对较新的功能,还是由于运行测试时潜在的陷阱而避免了它?

使用 beforeAll 对我来说更有意义(为什么要多次添加相同的匹配器?),但我想确保我的测试不会遇到任何问题。

最佳答案

有两个区别 - 1) 执行顺序,以及 2) 更改持续的范围。我在工作中花了很多时间在 Jasmine 中进行测试,beforeAllbeforeEach 之间的差异一直表现得很好(嗯,除了我帮助他们修复的一个 bug)。我发现使用 beforeEach 而不是 beforeAll 的唯一原因是为了避免测试污染。这对于自定义匹配器来说不是问题,因此继续使用 beforeAll 应该没问题。

执行顺序 - 在任何给定的 describe 块中,顺序如下:

  • beforeAll
  • beforeEach
  • 第一个嵌套的 itdescribe 块(包括它们的设置和拆卸)
  • afterEach
  • 对于每个额外的嵌套 itdescribe 块,重复最后三个步骤
  • afterAll

  • 我已经通过测试和 this 等来源证实了这一点。

    作用域 - this 关键字 spiescustom matchers(如上所述)上任何添加的变量、属性将在给定块中、整个块中(包括在嵌套块中)持久且可访问,只要添加它们的代码具有被处决。例如,如果我在 this.foobeforeAll 中设置 describe ,则可以在 describebeforeEachafterEachafterAll 以及 itdescribe 块中访问它。一旦我离开 describe 块,this.foo 将不再可访问。

    关于javascript - Jasmine 自定义匹配器和之前,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31682153/

    10-12 07:41