Reason/Bucklescript+bs-jest:如何编译__tests__外的*.test.re文件?
解决bs-jest编译组件目录下
*.test.re文件的问题 我之前也碰到过一模一样的情况,要让组件目录里的*.test.re正确编译成对应格式的文件,同时让Jest正常识别运行,需要调整Bucklescript配置和Jest配置两个部分,具体步骤如下:
1. 修改Bucklescript配置(bsconfig.json)
默认bs-jest只会处理__tests__目录下的测试文件,我们需要让它扫描组件目录里的测试文件,同时保证编译后的文件名保留.test标识:
打开项目根目录的bsconfig.json,调整sources和package-specs字段:
{ "sources": [ { "dir": "src", "subdirs": true }, { "dir": "Components", // 指定你的组件根目录 "subdirs": true, "filter": "**/*.test.re" // 匹配所有组件子目录下的测试文件 } ], "package-specs": [ { "module": "commonjs", "in-source": true // 让编译产物和源文件同目录,生成xxx.bs.js和xxx.test.bs.js } ], // 保留原有其他配置... "bs-dev-dependencies": ["bs-jest"] }
这里的核心点:
- 通过
sources配置让Bucklescript扫描组件目录下的测试文件 in-source: true确保编译后的文件和源文件在同一目录,完全符合你想要的目录结构
2. 调整Jest配置,识别编译后的测试文件
Jest默认只会匹配*.test.js,但我们的测试文件编译后是*.test.bs.js,所以需要修改Jest的匹配规则:
方式一:创建jest.config.js文件
module.exports = { testMatch: [ "**/__tests__/**/*.js", // 保留原有的__tests__目录匹配 "**/?(*.)+(test).bs.js" // 新增匹配所有xxx.test.bs.js文件 ], // 保留原有其他配置... };
方式二:在package.json中配置jest字段
{ "jest": { "testMatch": [ "**/__tests__/**/*.js", "**/?(*.)+(test).bs.js" ] } }
3. 验证效果
运行bsb -make-world编译项目,你会看到Components/toolbar目录下生成了toolbar.bs.js和toolbar.test.bs.js;接着执行jest,Jest会自动识别并运行这些测试文件,完全保留默认的运行逻辑。
如果遇到问题,可以检查:
bsconfig.json里的sources路径是否正确指向你的组件目录- Jest的
testMatch规则是否正确覆盖了.test.bs.js后缀 - 确认
bs-jest已经正确安装在开发依赖中
内容的提问来源于stack exchange,提问作者Charlie-Greenman
相关产品推荐
相关产品推荐

