jest/prefer-spy-on スタイル
何をするか
関数のモックを作成するためにプロパティを上書きする場合、クリーンアップ時に元の実装を手動で復元する必要があります。一方、jest.spyOn() を使用すると、Jest が変更を追跡し、jest.restoreAllMocks()、mockFn.mockRestore()、または Jest 設定で restoreMocks を true に設定することで、変更を復元できます。
注:
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