我注意到我的Angular
个构建的默认行为是以随机顺序运行Jasmine
个单元测试.与每次都以相同的顺序运行测试相比,以随机顺序运行测试有什么好处?
我注意到我的Angular
个构建的默认行为是以随机顺序运行Jasmine
个单元测试.与每次都以相同的顺序运行测试相比,以随机顺序运行测试有什么好处?
有时,测试会修改不会在每次测试运行时重置的状态.也许一个测试修改了一个被所有测试共享的全局变量.也许一个测试在数据库中写入了一些东西,但在测试完成时没有将其清除.这些事情都会发生,但有时确实会发生.
例如:
// Stupid contrived example. Don't ever do this.
let num = 0
it('A', () => {
expect(num + 1).toEqual(1)
})
it('B', () => {
num = 10
expect(num + 2).toEqual(12)
})
it('C', () => {
expect(num + 3).toEqual(13) // passes if B is run before C, otherwise fails
})
如果总是运行测试A,然后运行B,然后运行C,这可能会很好.但是如果运行only个测试C,就会发生奇怪的事情.由于测试A和B所做的更改,当您同时运行它们时,C通过.但是如果你单独运行测试C,它就会失败.
现在,你正目瞪口呆地看着终端输出,喃喃地说:"C测试怎么会失败?!它刚刚通过了!"
随机化的顺序有助于这一点.每个测试都是完全隔离的,它们的运行顺序应该无关紧要.随机化可能有助于发现这种不良现象.
既然顺序shouldn't很重要,那么为什么要将顺序随机化呢?