javascript - 以随机顺序运行单元测试有什么意义?

标签 javascript typescript unit-testing

我注意到 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/

相关文章:

javascript - 如何在 Angular 中的自定义指令内设置 d3 图表?

javascript - yup.js 对象验证,允许任何键,但值必须是字符串或字符串数​​组

c++ - 最先进的 C++ 单元测试?

Angularjs 单元测试依赖于路由解析的 Controller

javascript - JQuery 小部件 : setting context in sub-widget

javascript - 可以在收听时添加到 Node.js Express 的路由吗?

typescript 。函数类型

javascript - 将列表项数据从一页传输到另一页

reactjs - 如何轻松获取 ts 类型的 react-native element prop?

unit-testing - 当构建过程使用强名称签署程序集时让 InternalsVisibleTo 工作?