Skip to content
← Back to rules

jest/prefer-spy-on スタイル

An auto-fix is available for this rule.

何をするか

関数のモックを作成するためにプロパティを上書きする場合、クリーンアップ時に元の実装を手動で復元する必要があります。一方、jest.spyOn() を使用すると、Jest が変更を追跡し、jest.restoreAllMocks()mockFn.mockRestore()、または Jest 設定で restoreMockstrue に設定することで、変更を復元できます。

注:jest.spyOn() によって作成されたモックは、元の関数と同じように動作します。元の関数は mockFn.mockImplementation() または 他のモック関数 のいずれかを使って上書きできます。

なぜこれは良くないのか

モック関数でプロパティを直接上書きすると、クリーンアップの問題やテストの分離(孤立)問題が生じる可能性があります。プロパティにモックを手動で代入した場合、元の実装を復元する責任が自分にあります。これは忘れやすく、テスト同士が互いに影響を与える原因になります。jest.spyOn() を使うことで、自動的なクリーンアップ機能が得られ、テストの信頼性が向上します。

このルールに違反する不適切なコード例

javascript
Date.now = jest.fn();
Date.now = jest.fn(() => 10);

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

javascript
jest.spyOn(Date, "now");
jest.spyOn(Date, "now").mockImplementation(() => 10);

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

json
{
  "rules": {
    "vitest/prefer-spy-on": "error"
  }
}

使い方

このルールを有効化するには、設定ファイルまたは CLI で以下のように使用できます:

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

参照