Reason/Bucklescript + bs-jest:如何在 __tests__ 文件夹外编译带有 *.test.re 模式的文件?

Reason/Bucklescript + bs-jest: How to compile files with a *.test.re pattern outside of __tests__ folder?

背景:

我目前正在使用 bs-jest 进行单元测试。此外,我使用的是 bsb init 项目,这意味着我首先使用 Reason/Bucklescript 编译文件 + 然后 运行ning 使用 Webpack 编译文件。

默认情况下,Jest 将选取其中包含单词 test 的文件,例如 component.test.js,将由 Jest 默认选取。

Bs-jest 将默认运行,文件放在 __tests__ 目录中。但是,我的规范文件遵循 *.test.re 模式,放在我的组件文件夹中,即放在 __tests__ 以外的文件夹中将不会编译为适当的 *test.js 文件。

Objective:

编译:

├── Components
|   ├── toolbar
|   |   └── toolbar.re
|   |   └── toolbar.test.re

收件人:

├── Components
|   ├── toolbar
|   |   └── toolbar.bs.js
|   |   └── toolbar.test.bs.js

然后使用 Jest 运行 并像当前默认情况下一样工作。

非常感谢您的帮助。谢谢你。

这与在您的 bsconfig.json 中您的包被标记为 dev 的事实有关。这意味着它将无法在非开发源中获取,例如您的 src 文件夹。通过将其移至常规依赖项,它将按预期工作。

话虽这么说,现在您可以了解架构,也许由于编译原因,它为什么在自己的文件夹中。

我在两个项目中使用了 bs-jest,其中测试没有在根级别 __tests__ 目录中进行,因为我更喜欢使用 src/test。您需要调整开玩笑 运行s 的方式,以便 运行 测试和收集覆盖率。通常,您只需要添加 --env=jsdom 并指定目录,例如:

"test": "jest --env=jsdom --testMatch='**/test/*test.{js, re}' --watch"

Example package.json and another example

您可以在package.json中自定义测试文件路径,例如:

  ...

  "scripts": {
    "test": "jest",
    "watch:test": "jest --watchAll",
  },

  ...

  "jest": {
    "verbose": true,
    "testEnvironment": "jsdom",
    "testMatch": [
      "**/tests_jest/*.{js,re}",
      "**/tests_jest_blablabla/*.{js,re}"
    ]
  }