こんにちは。野中やすおです。
最近テストコードを書く際にno-conditional-in-testというESLintエラーで時々怒られます。ということで調べてみました。
no-conditional-in-testとは何か?
JavaScriptのテストフレームワーク( JestやVitestなど)で使用されるESLintのルールの1つです。
このルールの目的は、テストケース内での条件文(if、else、switch、? : など)の使用を防ぐことにあります。
そもそもテストケースは、特定の入力に対する出力を検証するためのものです。
しかし、条件文を使用するとテストの実行結果が入力データや外部状態に依存するようになり、テストの予測可能性や再現性が損なわれる恐れがあります。また条件文をテストに含めてしまうと網羅性を担保することが難しくなります。
よってこうした条件文を防ぐためにno-conditional-in-testを設定し、Lintエラーを出します。
no-conditional-in-testの例
1 2 3 4 5 6 7 8 |
test('should process data correctly', () => { const data = fetchData(); if (data) { expect(processData(data)).toBe('expected result'); } else { expect(data).toBeNull(); } }); |
1 2 3 4 5 6 7 8 9 10 |
test('should process non-null data correctly', () => { const data = fetchData(); expect(data).not.toBeNull(); expect(processData(data)).toBe('expected result'); }); test('should handle null data correctly', () => { const data = null; expect(processData(data)).toBeNull(); }); |
参考
JestやVitestにおけるno-conditional-in-testのプラグインを参考にしました。
https://github.com/jest-community/eslint-plugin-jest/blob/main/docs/rules/no-conditional-in-test.md
https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-in-test.md