---
url: /docs/guide/usage/linter/rules/jest/no-restricted-matchers.md
---

### 它的作用

禁止使用特定的 matcher 和修饰符，并且可以给出替代建议。

### 为什么这不好？

由于各种原因，你的代码库中可能不建议使用某些 matcher 或修饰符：
它们可能已被弃用、容易造成混淆、会带来性能影响，或者
存在更好的替代方案。此规则允许你通过限制某些 Jest matcher 并提供
推荐替代方案的指导，来强制执行一致的测试模式。

### 示例

禁用项以映射的形式表达，其值可以是字符串消息（将显示出来），
如果只使用默认规则消息，则为 null。禁用项会针对 expect 链的开头进行检查——这意味着要完全禁用某个特定的 matcher，你必须指定全部
六种排列组合，但这也允许你同时禁用修饰符。默认情况下，这个映射为空，表示
没有 matcher 或修饰符被禁用。

示例配置：

```json
{
  "jest/no-restricted-matchers": [
    "error",
    {
      "toBeFalsy": null,
      "resolves": "使用 `expect(await promise)` 代替。",
      "toHaveBeenCalledWith": null,
      "not.toHaveBeenCalledWith": null,
      "resolves.toHaveBeenCalledWith": null,
      "rejects.toHaveBeenCalledWith": null,
      "resolves.not.toHaveBeenCalledWith": null,
      "rejects.not.toHaveBeenCalledWith": null
    }
  ]
}
```

在上述配置下，此规则的**错误**代码示例：

```javascript
it("is false", () => {
  // 如果这里有一个修饰符（例如 `not.toBeFalsy`），则会被视为可以接受
  expect(a).toBeFalsy();
});

it("resolves", async () => {
  // 禁止此修饰符的所有用法，无论 matcher 是什么
  await expect(myPromise()).resolves.toBe(true);
});

describe("when an error happens", () => {
  it("does not upload the file", async () => {
    // 禁止此 matcher 的所有用法
    expect(uploadFileMock).not.toHaveBeenCalledWith("file.name");
  });
});
```

## 配置

此规则接受一个带有以下属性的配置对象：

type: `object`

## 如何使用

## 版本

此规则在 v0.2.3 中添加。

## 参考资料
