You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:47:30