跳至内容

jest/no-conditional-expect 正确性

其作用

此规则阻止在条件块中使用 expect,例如 if 和 catch(s)。这包括在名为 catch 的函数回调中使用 expect,这些函数被视为 Promise。

为什么这个规则不好?

Jest 仅在抛出错误时才认为测试失败,这意味着如果在条件代码(例如 catch 语句)中使用了断言函数(如 expect),测试最终可能会通过,但实际上并没有测试任何内容。此外,条件语句往往会使测试变得更脆弱和复杂,因为它们增加了理解实际正在测试的内容所需的心智思考量。

示例

javascript
it("foo", () => {
  doTest && expect(1).toBe(2);
});

it("bar", () => {
  if (!skipTest) {
    expect(1).toEqual(2);
  }
});

it("throws an error", async () => {
  await foo().catch((error) => expect(error).toBeInstanceOf(error));
});

此规则与 eslint-plugin-vitest 兼容。要使用它,请将以下配置添加到 .eslintrc.json

json
{
  "rules": {
    "vitest/no-conditional-expect": "error"
  }
}

参考

在 MIT 许可证下发布。