Webpackテスト

Webpackテストケース

注記: tests/webpack-testwebpack/test をベースとしています。

Webpackテストの段階的移行

当初、互換性を計算する式は passedTestCaseCount / totalTestCount (totalTestCount = passedTestCaseCount + failedTestCount + skippedTestCount)でしたが、パフォーマンスやサポート対象外とするレガシー機能など、様々な理由から全てのWebpackテストケースとの互換性を確保することが困難な場合があります。そのため、サポートしないテストをスキップするメカニズムが必要となり、元の式を(passedTestCaseCount + willNotSupportTestCount) / totalTestCountに変更しました。

現在、失敗したテストケースディレクトリの下にあるtest.filter.jsを使用して、失敗したテストケースをスキップしています。この方法により、(実際のpassedTestCaseCountに影響を与えないため)実際の互換性に影響を与えることなく、Webpackテストケースを段階的に移行できます。

例:

// test.filter.js
module.exports = () => {
  return false; // false means this testcase is skipped for now, but maybe we will support in the future, `-1` means this test case we don't want to compatible with, this related to `willNotSupportTest`.
};

現在スキップされている失敗したテストケースがパスしたことが判明した場合、test.filter.jsを以下のように変更できます。

module.exports = () => {
  return true;
};

または、test.filter.jsを削除します。

Webpackプラグインテストケース

実装の違いとパフォーマンスの考慮事項に基づき、Rspackは一部のWebpackプラグインを内部的に統合します。プラグインの互換性テストのため、プラグインのテストスイートもtests/plugin-testフォルダにコピーされます。

そのため、元のレポジトリとの整合性を保つため、以下のシナリオを除き、これらのテストケースを変更することは推奨されません。

  • 新しいWebpackプラグインをRspackに統合する場合、そのプラグインのテストケースをコピーする必要があります。
  • RspackとWebpackのアートファクト(例:ハッシュの違い)に違いがある場合、一部のテストケースを変更する必要がある場合があります。

上記以外のシナリオでは、テストケースの追加についてはRspackテストガイドラインに従ってください。

テストの実行

これらのテストケースは、以下の方法で実行できます。

  • ルートディレクトリで./x test pluginまたはpnpm run test:pluginを実行します。
  • または、rspack/tests/plugin-testディレクトリでnpm run testを実行します。
  • スナップショットを更新するには、tests/plugin-testディレクトリでnpm run test -- -uを実行します。
  • 特定のjest cliパラメータを渡すには、tests/plugin-testディレクトリでnpm run test -- {args}を実行します。

テストケースの追加

  1. tests/plugin-test/{plugin-name}フォルダを作成し、そのプラグインのテストケースをフォルダにコピーします。
  2. tests/plugin-test/jest.config.jsのテスト設定を調整します。特別な設定が必要な場合は、以下の手順に従います。
    1. tests/plugin-test/jest.{plugin-name}.config.jsを作成し、jest.config.jsをインポートして、それに基づいて変更します。
    2. tests/plugin-test/package.jsonscriptsプロパティにtest:{plugin-name}コマンドを追加します。
    3. スナップショットテストが含まれる場合は、global.updateSnapshotを使用してスナップショットを更新するかどうかを決定します。
  3. ライセンス情報の更新
    1. tests/plugin-test/{plugin-name}/README.mdファイルを追加し、テストケースのソースレポジトリからライセンス情報を記載します。
    2. tests/plugin-test/README.mdファイルを更新し、テストケースのソースレポジトリからのリンクとクレジット情報を追加します。