我注意到我的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很重要,那么为什么要将顺序随机化呢?

Javascript相关问答推荐

为什么这个自定义组件会被放置在TR之外?

Angular 拦截器错误处理删除方法问题

Mongodb拥有5亿个文档,我想根据JavaScript驱动程序中的两个字段使用regEx进行搜索,而不是模式

仅圆角的甜甜圈图表

使用AJX发送表单后,$_Post看起来为空

如何使覆盖div与可水平滚动的父div相关?

如何在 cypress 中使用静态嵌套循环

在Three JS中看不到补间不透明度更改效果

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

当id匹配时对属性值求和并使用JavaScript返回结果

在Matter.js中添加从点A到另一个约束的约束

如何将数据块添加到d3力有向图中?

如何将数组用作复合函数参数?

如何使用TypeScrip设置唯一属性?

警告框不显示包含HTML输入字段的总和

为列表中的项目设置动画

在SuperBase JS客户端中寻址JSON数据

select 2-删除js插入的项目将其保留为选项

通过解构/功能组件接收props-prop验证中缺少错误"

如何正确地在ComponentWillUnmount中卸载状态以避免内存泄漏?