Skip to content
← Back to rules

jest/prefer-expect-resolves スタイル

🛠️ An auto-fix is available for this rule.

何をするか

プロミスのテストにおいて、expect(await ...) の代わりに await expect(...).resolves を推奨します。

なぜ問題か

プロミスを扱う際には、解決値をテストする主な方法が2つあります:

  1. expectresolve モディファイアを使用する (await expect(...).resolves.<matcher> 形式)
  2. プロミスを await してその結果に対してアサーションを行う (expect(await ...).<matcher> 形式)

第二のスタイルは jest 依存度がやや低いとされる一方で、プロミスが拒否(reject)された場合、一般エラーとして扱われることになり、jest の振る舞いや出力が予測しにくくなります。

さらに、第一のスタイルを優先することで、rejects との一貫性が保たれます。なぜなら、拒否(rejection)を「待つ(await)」ことはできないからです。

このルールに違反する 誤り の例:

javascript
it("成功する", async () => {
  expect(await someValue()).toBe(true);
});
it("真である", async () => {
  const myPromise = Promise.resolve(true);
  expect(await myPromise).toBe(true);
});

このルールに従った 正しい 例:

javascript
it("成功する", async () => {
  await expect(someValue()).resolves.toBe(true);
});
it("真である", async () => {
  const myPromise = Promise.resolve(true);

  await expect(myPromise).resolves.toBe(true);
});
it("エラーになる", async () => {
  await expect(Promise.reject(new Error("おお、ダメ!"))).rejects.toThrowError("おお、ダメ!");
});

このルールは eslint-plugin-vitest と互換性があります。利用するには .oxlintrc.json に以下の設定を追加してください:

json
{
  "rules": {
    "vitest/prefer-expect-resolves": "error"
  }
}

使用方法

このルールを構成ファイルまたは CLI で 有効化 するには、次のように使用できます:

json
{
  "plugins": ["jest"],
  "rules": {
    "jest/prefer-expect-resolves": "error"
  }
}
bash
oxlint --deny jest/prefer-expect-resolves --jest-plugin

参照