我注意到 Karma
对于我的 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,这可能会很好地工作。但是如果您运行仅测试 C,那么奇怪的事情就会发生。因为测试 A 和测试 B 所做的更改, 当你一起运行它们时 C 通过。但是随后您单独运行测试 C,但它失败了。
而现在你正盯着你的终端输出目瞪口呆地喃喃自语“到底怎么能测试 C 失败?!它刚刚通过!”
随机化顺序对此有所帮助。每个测试都应该是完全隔离的,它们运行的顺序无关紧要。将它们随机化可能有助于发现这种缺陷。
那么,既然顺序不应该很重要,那为什么不随机化顺序呢?
关于javascript - 以随机顺序运行单元测试有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71977085/