jest/no-conditional-expect 正确性
它的作用
此规则禁止在条件块(如 if 语句和 catch 块)中使用 expect,包括在名为 catch 的函数回调中使用 expect,这些函数被假定为处理 Promise。
为什么这是个问题?
Jest 只有在抛出错误时才认为测试失败,这意味着如果断言函数(如 expect)调用出现在条件代码中(例如 catch 语句),测试可能会看似通过但实际上并未真正测试任何内容。此外,条件逻辑会使测试变得更加脆弱且复杂,因为需要更多的思维来理解实际被测试的内容。
示例
以下为该规则的 错误 代码示例:
js
it("foo", () => {
doTest && expect(1).toBe(2);
});
it("bar", () => {
if (!skipTest) {
expect(1).toEqual(2);
}
});
it("baz", async () => {
try {
await foo();
} catch (err) {
expect(err).toMatchObject({ code: "MODULE_NOT_FOUND" });
}
});
it("抛出错误", async () => {
await foo().catch((error) => expect(error).toBeInstanceOf(error));
});以下为该规则的 正确 代码示例:
js
it("foo", () => {
expect(!value).toBe(false);
});
function getValue() {
if (process.env.FAIL) {
return 1;
}
return 2;
}
it("foo", () => {
expect(getValue()).toBe(2);
});
it("验证请求", () => {
try {
processRequest(request);
} catch {
} finally {
expect(validRequest).toHaveBeenCalledWith(request);
}
});
it("抛出错误", async () => {
await expect(foo).rejects.toThrow(Error);
});此规则与 eslint-plugin-vitest 兼容。要使用它,请将以下配置添加到您的 .oxlintrc.json 文件中:
json
{
"rules": {
"vitest/no-conditional-expect": "error"
}
}如何使用
要通过配置文件或 CLI 启用 此规则,可以使用:
json
{
"plugins": ["jest"],
"rules": {
"jest/no-conditional-expect": "error"
}
}bash
oxlint --deny jest/no-conditional-expect --jest-plugin