テスト
要約
すべてのテストを実行し、スナップショットを自動的に更新するには、`just test-update` を実行します。
テストスイートは、Rust用とNode.js用の2つのグループがあります。
概要
- `just test`:すべてのテストを実行します。
- `just test-update`:すべてのテストを実行し、スナップショットを自動的に更新します。
- `just test-rust`:すべてのRustテストを実行します。
- `just test-node`:すべてのNode.jsテストを実行します。
- `just test-node rolldown`:RolldownのNode.jsテストのみを実行します。
- `just test-node rollup`:Rollupのテストのみを実行します。
- `just update-esbuild-diff` または `just ued`:esbuildテストスイートのdiffを更新します。
Rustテスト
Rustのテストケースは、以下に格納されています。
/crates/rolldown/tests/esbuild
/crates/rolldown/tests/fixtures
テストケースの定義方法
テストケースは、`_config.json`を含むフォルダです。
`_config.json`には、テストスイートの設定が含まれています。すべてが正しく動作すれば、設定により、`_config.json`の編集中に自動補完が利用できるはずです。
利用可能なすべてのオプションについては、以下を参照してください。
https://github.com/rolldown/rolldown/blob/main/crates/rolldown_testing_config/src/lib.rs
https://github.com/rolldown/rolldown/blob/main/crates/rolldown_testing/_config.schema.json
`_config.json`で`config.input`が指定されていない場合、`main.js`がテストケースのデフォルトのエントリポイントになります。
Rolldownは入力を`/dist`にバンドルし、`/dist`内のすべてのエントリファイルを順番に実行します。`node --import ./dist/entry1.mjs --import ./dist/entry2.mjs --import ./dist/entry3.mjs --eval ""`を実行するようなものと考えてください。
- テストケースフォルダに`_test.mjs`/`_test.cjs`が存在する場合、`_test.mjs`/`_test.cjs`のみが実行されます。コンパイルされたエントリを実行する場合は、`_test.mjs`/`_test.cjs`で手動でインポートする必要があります。
Rustでの関数完全テスト
`_config.json`には制限があるため、Rustを使用して直接テストを作成することもできます。以下を参照してください。
スナップショットテスト
RolldownはRustのスナップショットテストにinstaを使用しています。以下を使用できます。
- `cargo insta review`:新しいスナップショットを1つずつ確認します。
- `cargo insta accept`:すべての新しいスナップショットを一度に承認します。
Node.jsテスト
ヒント
これらのテストを実行する前に、Node.jsバインディングをビルドすることを確認してください。
Node.js APIテスト
`packages/rolldown/tests`にあるテストは、RolldownのNode.js API(つまり、NPMで公開されている`rolldown`パッケージのAPI)をテストするために使用されます。
RolldownのNode.js APIをRollupのAPIと可能な限り一致させることを目標としており、テストを使用してAPIの整合性を検証し、進捗状況を追跡しています。現在、まだサポートされていないRollupオプションが多くあります。rollupから追加のオプションのサポートを実装した場合は、対応するテストケースを追加してください。
- `just test-node rolldown`:rolldownテストを実行します。
- `just test-node rolldown --update`:テストを実行し、スナップショットを更新します。
特定のファイルのテストの実行
特定のファイルのテストを実行するには、以下を使用できます。
just test-node rolldown test-file-name
たとえば、`fixture.test.ts`のテストを実行するには、`just test-node rolldown fixture`を使用します。
特定のテストの実行
特定のテストを実行するには、以下を使用できます。
just test-node rolldown -t test-name
`fixture.test.ts`のテスト名は、フォルダ名で定義されます。`tests/fixtures/resolve/alias`のテスト名は`resolve/alias`になります。
`tests/fixtures/resolve/alias`テストを実行するには、`just test-node rolldown -t resolve/alias`を使用します。
情報
`just test-node rolldown -t aaa bbb`と`just test-node rolldown -t "aaa bbb"`は異なります。前者は`aaa`または`bbb`を含むテストを実行しますが、後者は`aaa bbb`を含む名前のテストを実行します。
詳細な使用方法については、https://vitest.dokyumento.jp/guide/filteringを参照してください。
Rollup動作との整合性テスト
Rollup独自のテストをRolldownに対して実行することにより、Rollupとの動作の整合性も目指しています。
これを実現するために、`packages/rollup-tests/test`の各テストケースは、プロジェクトルートの`rollup` gitサブモジュール内の対応するテストにプロキシします。
プロジェクトの設定時に`just init`を実行した後、gitサブモジュールは初期化されているはずですが、Rollupテストを実行する前に`just update`を実行してサブモジュールを更新する必要があります。
`/packages/rollup-tests`
- `just test-node rollup`:rollupテストを実行します。
- `just test-node rollup --update`:テストを実行し、テストの状態を更新します。