jest/prefer-expect-resolves スタイル
何をするか
プロミスのテストにおいて、expect(await ...) の代わりに await expect(...).resolves を推奨します。
なぜ問題か
プロミスを扱う際には、解決値をテストする主な方法が2つあります:
expectにresolveモディファイアを使用する (await expect(...).resolves.<matcher>形式)- プロミスを
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