Rspack 的测试用例包括如下:
tests/rspack-test
文件夹下,会通过模拟构建流程以运行测试用例。通常情况下,都在此文件夹下添加测试用例。packages/{name}/tests
文件夹下,仅当修改对应包时添加/修改。可以通过如下方式运行这些测试用例:
./x test unit
或 pnpm run test:unit
。tests/rspack-test
目录下运行 npm run test
。tests/rspack-test
目录下运行 npm run test -- -u
。tests/rspack-test
目录下运行 npm run test -- {args}
。tests/rspack-test
目录下运行 npm run test -- -t path-of-spec
。
npm run test -- -t configCases/asset
即可仅运行 tests/rspack-test/configCases/asset
文件夹下的用例(config 会自动映射到 configCases,其他文件夹类似)。NAPI_RS_FORCE_WASI=1
: 强制使用 Rspack Wasm 而不是原生绑定WASM=1
:启用 Wasm 专用的测试配置NODE_NO_WARNINGS=1
: 关闭 Node.js 的 Wasm 警告。文件夹 tests/rspack-test
的结构如下所示:
{Name}.test.js
作为测试的入口文件,会遍历 {name}Cases
并运行其中的用例。因此当你需要添加/修改测试用例时,请根据需要测试的功能类型在相应的 {name}Cases
文件夹下添加用例。
目前已有的测试类型有:
rspack.config.js
时可使用此测试类型。rspack.config.js
添加特定配置才可以运行时,且不符合其他场景时可使用此测试类型。target=async-node
,HotWeb 会固定使用 target=web
,HotWorker 会固定使用 target=webworker
。compilation.errors
和 compilation.warnings
的互操作。请优先在以上测试类型中添加用例。
测试入口 | tests/Normal.test.js |
---|---|
用例目录 | tests/normalCases |
产物目录 | tests/js/normal |
默认配置 | NormalProcessor |
产物运行 | 是 |
用例的编写与常规的 rspack 项目相同,但不包含 rspack.config.js
文件,会使用固定的配置构建。
测试入口 | tests/Config.test.js |
---|---|
用例目录 | tests/configCases |
产物目录 | tests/js/config |
默认配置 | ConfigProcessor |
产物运行 | 是 |
此测试用例与常规的 rspack 项目相同,可通过添加 rspack.config.js
来指定构建配置,并可通过添加 test.config.js
来控制测试运行时的各种行为,其结构如下:
测试入口 | Hot{Target}.test.js |
---|---|
用例目录 | tests/hotCases |
产物目录 | tests/js/hot-{target} |
默认配置 | HotProcessor |
产物运行 | 是 |
此测试用例与常规的 rspack 项目相同,可通过添加 rspack.config.js
来指定构建配置
对应的在变更的文件内通过 ---
分割变更前后的代码:
在用例的代码中,通过 NEXT
方法控制文件变更时机,并在其中添加测试代码:
测试入口 | HotSnapshot.hottest.js |
---|---|
用例目录 | tests/hotCases |
产物目录 | tests/js/hot-snapshot |
默认配置 | 与 Hot 相同 |
产物运行 | 是 |
与 Hot{Target}
测试使用相同的测试用例。并在用例文件夹下生成 __snapshots__/{target}/{step}.snap.txt
文件,用于对每一次 HMR 的增量产物进行 snapshot 测试。
Snapshot 结构如下:
hot-update.json
元数据文件内容,其中
"c"
:本次 HMR 需要更新的 chunk 的 id"r"
:本次 HMR 需要移除的 chunk 的 id"m"
:本次 HMR 需要移除的 module 的 idhot-update.js
补丁文件信息,其中:
入口文件 | Watch.test.js |
---|---|
用例目录 | tests/watchCases |
产物目录 | tests/js/watch |
默认配置 | WatchProcessor |
产物运行 | 是 |
由于 Watch 构建需要分多步进行,可通过添加 rspack.config.js
来指定构建配置。其用例的目录结构较为特殊,会以自增的数字表示变更批次:
同时在测试的代码中,可以通过 WATCH_STEP
变量获取当前的变更批次数字。
测试入口 | StatsOutput.test.js |
---|---|
用例目录 | tests/statsOutputCases |
产物目录 | tests/js/statsOutput |
默认配置 | StatsProcessor |
产物运行 | 否 |
用例的编写与常规的 rspack 项目相同,运行后会将控制台输出信息生成快照并存放在 tests/rspack-test/__snapshots__/StatsOutput.test.js.snap
中。
由于部分 StatsOutput 测试用例包含 hash。因此当你修改了产物代码时,请通过 -u
参数刷新这些用例的快照。
入口文件 | StatsAPI.test.js |
---|---|
用例目录 | tests/statsAPICases |
产物目录 | 无 |
默认配置 | 无 |
产物运行 | 否 |
此测试固定使用 tests/rspack-test/fixtures
作为构建的源码,因此用例以单文件编写,其输出结构如下:
入口文件 | Diagnostics.test.js |
---|---|
用例目录 | tests/diagnosticsCases |
产物目录 | tests/js/diagnostics |
默认配置 | DiagnosticProcessor |
产物运行 | 否 |
此测试用例与常规的 rspack 项目相同,可通过添加 rspack.config.js
来指定构建配置,但额外会在用例目录下添加 stats.err
文件用于存储警告/错误的快照,如需刷新请使用 -u
参数。
入口文件 | Hash.test.js |
---|---|
用例目录 | tests/hashCases |
产物目录 | 无 |
默认配置 | HashProcessor |
产物运行 | 否 |
此测试用例与常规的 rspack 项目相同,但额外会在用例目录下添加 test.config.js
文件,并指定 validate()
方法用于在构建结束后检测 stats 对象中的 hash 信息:
入口文件 | Compiler.test.js |
---|---|
用例目录 | tests/compilerCases |
产物目录 | 无 |
默认配置 | 无 |
产物运行 | 否 |
此测试固定使用 tests/rspack-test/fixtures
作为构建的源码,因此用例以单文件编写,其输出结构如下:
入口文件 | Defaults.test.js |
---|---|
用例目录 | tests/defaultCases |
产物目录 | 无 |
默认配置 | 无 |
产物运行 | 否 |
此测试不会执行真实的构建,仅会生成构建配置并观察与默认配置的差异。基础的默认配置会生成快照并存放在 tests/rspack-test/__snapshots__/Defaults.test.js.snap
中。
此测试固定使用 tests/rspack-test/fixtures
作为构建的源码,因此用例以单文件编写,其输出结构如下:
入口文件 | Error.test.js |
---|---|
用例目录 | tests/errorCases |
产物目录 | 无 |
默认配置 | ErrorProcessor |
产物运行 | 否 |
此测试的用例固定使用 tests/rspack-test/fixtures
作为构建的源码,因此测试用例以特定的配置结构编写:
入口文件 | Hook.test.js |
---|---|
用例目录 | tests/hookCases |
产物目录 | 无 |
默认配置 | HookProcessor |
产物运行 | 否 |
会记录 hook 的出入参并存放在快照 hooks.snap.txt
中,最终产物代码的快照存放在 output.snap.txt
中。
此测试的用例固定使用 tests/rspack-test/fixtures
作为构建的源码,因此测试用例以特定的配置结构编写:
入口文件 | TreeShaking.test.js |
---|---|
用例目录 | tests/treeShakingCases |
产物目录 | tests/js/treeShaking |
默认配置 | TreeShakingProcessor |
产物运行 | 否 |
此测试用例与常规的 rspack 项目相同,可通过添加 rspack.config.js
来指定构建配置,但会将最终产物生成快照并存放在 __snapshots__/treeshaking.snap.txt
中。
入口文件 | Builtin.test.js |
---|---|
用例目录 | tests/builtinCases |
产物目录 | tests/js/builtin |
默认配置 | BuiltinProcessor |
产物运行 | 否 |
此测试用例与常规的 rspack 项目相同,可通过添加 rspack.config.js
来指定构建配置。
但根据目录的不同,会将不同的产物生成快照并存放在 __snapshots__/output.snap.txt
中:
.css
后缀文件生成快照.css
和 .js
后缀文件生成快照.html
后缀文件生成快照.js
后缀文件生成快照