javascript - Jasmine 自定义匹配器,最重要的是

标签 javascript jasmine

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

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

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

最佳答案

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

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

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

我已经通过测试和来源(如 this)证实了这一点.

范围 - 在 this 上添加的任何变量、属性关键词,spies , 或 custom matchers (如前所述),一旦添加它们的代码被执行,它们将在整个 block (包括嵌套 block )中在给定 block 中持久存在和可访问。例如,如果我在 describebeforeAll 中设置 this.foo,它可以在那个 describe 中访问> 的 beforeEachafterEachafterAll 以及 itdescribe block 。一旦我离开 describe block ,this.foo 将不再可访问。

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

相关文章:

javascript - 我可以使用 Javascript 调用 Azure 管理 REST API 吗?

javascript - 错误 : <toHaveBeenCalled> : Expected a spy, 但得到了功能

javascript - Meteor:检查有多少客户订阅了某个发布功能

javascript - JS中高效的字符串解析 : How to create a substring which does not allocate a new string

javascript - Protractor 和 Jasmine 永远不会解决获取网页标题的 promise

angularjs - 如何使用 Jasmine 测试 AngularJS 可信 html?

ajax - Jasmine 2.0 如何处理ajax请求

javascript - 我可以将 jest 测试作为常规 js 文件运行吗?

javascript - jQuery UI Datepicker - 带有阿拉伯语区域设置的下拉列表中的月份名称

javascript - 对 AngularJS 中的复选框值进行排序