如何用AVA分别以ES模块和CommonJS模块运行前后端.js测试?
用AVA分别测试ES模块前端与CommonJS后端的方案
完全可以针对前后端分别以对应模块模式运行测试,AVA支持通过配置管道实现这种差异化测试,具体步骤如下:
1. 拆分测试文件目录
将前后端测试文件分开存放,避免混淆:
tests/frontend/:存放前端ES模块相关的测试文件tests/backend/:存放后端CommonJS相关的测试文件
2. 配置AVA多测试管道
在项目根目录创建ava.config.js(采用CommonJS格式,因为项目未设置"type": "module"),配置两个独立的测试管道:
module.exports = { pipelines: { // 后端CommonJS测试配置 backend: { files: ['tests/backend/**/*.test.js'], nodeArguments: ['--no-warnings'], // 无需额外转译,默认以CommonJS模式加载文件 }, // 前端ES模块测试配置 frontend: { files: ['tests/frontend/**/*.test.js'], nodeArguments: ['--no-warnings', '--experimental-modules'], require: ['@babel/register'], extensions: { js: 'module' }, babel: true } } };
3. 配置Babel处理前端ES语法
创建babel.config.json,让Node能识别前端的ES模块语法:
{ "presets": [ ["@babel/preset-env", { "targets": { "node": "current" } }] ] }
4. 添加npm测试脚本
在package.json中添加命令,方便单独或统一运行测试:
{ "scripts": { "test:backend": "ava --pipeline=backend", "test:frontend": "ava --pipeline=frontend", "test": "npm run test:backend && npm run test:frontend" } }
额外提示
- 后端测试无需特殊转译,AVA会默认以CommonJS模式加载(因项目未设置
"type": "module"),管道配置仅用于限定测试范围。 - 若前端测试的是webpack/babel构建后的产物,可直接以CommonJS模式加载构建文件,省去Babel转译步骤,进一步简化配置。
内容的提问来源于stack exchange,提问作者Mark McKelvy
相关产品推荐
相关产品推荐

