在 ok 中不允许比较或赋值

此规则防止对 ok() 测试框架函数的两种误用。

赋值

第一个是人们意外地将赋值放入 ok 中,如下所示

ok(foo = bar, "Foo should be equal to bar");

这类似于内置的 eslint 规则 no-cond-assign

没有自动修复,因为代码风格检查工具无法判断赋值是否是故意的,并且应该移出 ok() 调用,或者它是否旨在作为某种二元比较表达式(如果是,使用什么运算符)。

比较

第二个是风格/可读性/可调试性偏好,其中代码风格检查工具鼓励使用专用的 Assert 框架比较函数。有关 Assert 的更多详细信息,请参阅 Assert 模块

此规则已自动修复,并将更正以下错误示例

此规则的错误代码示例:

ok(foo == bar);
ok(foo < bar);
ok(foo !== bar);

类似于

此规则的正确代码示例:

Assert.equal(foo, bar);
Assert.less(foo, bar);
Assert.notStrictEqual(foo, bar);

基本原理

更详细的形式更可取的原因有很多

  • 发生错误时,框架将记录两个值而不是一个值,这使得在无需手动添加日志、推送到 try 以及随后可能重新触发以重现间歇性问题等情况下调试失败的测试变得更加容易。

  • Assert 模块 是标准化的,并且比旧的 mocha/mochikit 形式更广为人知。

  • 犯上述赋值情况等错误的可能性较小,并且意外地最终得到断言无意义内容的测试的可能性也较小。

  • 主观上,当附加消息足够长以导致 prettier 将语句拆分为多行时,这使得更容易看到比较的两个操作数是什么。