如何将 jest 测试移动到 /test 文件夹并让它们运行?

Posted

技术标签:

【中文标题】如何将 jest 测试移动到 /test 文件夹并让它们运行?【英文标题】:How do I move jest tests to a /test folder and get them to run? 【发布时间】:2017-04-19 05:36:00 【问题描述】:

edit:我很确定这个问题已经过时了,从那时起 Jest 发生了变化。不要假设答案现在会起作用,甚至是相关的。

Jest 期望测试位于 _tests_ 文件夹中或命名为 blah.test.js。我不喜欢这两种模式。我希望我的测试文件位于/test 中,并将它们命名为test/index.ios.test.js 似乎是多余且愚蠢的。我的第一个尝试是将 package.json 中的 jest 配置更改为:

"jest": 
    "testPathDirs": ["test"],
    "testRegex": "\\.(js|jsx)$",
    "preset": "react-native"

成功找到测试但都失败了:

Cannot find module 'setupDevtools' from 'setup.js'
  
  at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:151:17)
  at Object.<anonymous> (node_modules/react-native/jest/setup.js:23:1)

该函数在node_modules/react-native/Libraries/Core/Devtools/setupDevtools.js 中。我如何告诉 Jest 在哪里可以找到它?

【问题讨论】:

【参考方案1】:

我认为在jest.config.js 中设置roots: ['&lt;rootDir&gt;/test/'] 很简单

module.exports = 
 roots: ['<rootDir>/test_unit/'],
 ...

它对我很有效。

【讨论】:

【参考方案2】:

我认为最好的方法是配置testMatch。默认为:

[ "**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)" ]

因此,您可以将__tests__ 更改为tests,或者在数组中添加一个新条目来检查两者。我在 package.json 中使用以下内容:

  "jest": 
    "testMatch": [ "**/tests/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)" ]
  ,

【讨论】:

这样更好,因为它保留了默认行为。 这是updated link【参考方案3】:

我通过设置正则表达式解决了这个问题,因此它可以在我的./test 文件夹中找到所有.js 文件:

"jest": 
   "preset": "react-native",
    "globals": 
        "__DEV__": true
    ,
    "testRegex": "./test/.*.js$",
    "rootDir": "."
 ,

(这里的 jcollum:我不知道 __DEV__ 在那里实际做什么,但如果不是,则会引发错误。开玩笑 17.0.3)

【讨论】:

这种模式不是要求.test.js吗?如果我将我的 test/index.ios.test.js 重命名为 test/index.ios.js,它将不起作用。 对不起,我误解了你的问题。你是说"./test/.*\\.ios\\.js$", 将您的答案编辑为我最终弄清楚的答案。很难在评论中清晰地发布这样的代码

以上是关于如何将 jest 测试移动到 /test 文件夹并让它们运行?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用不同的jest.config.js进行单元和组件测试?

指定 jest 测试文件目录

如何将带有 Jest 的 Vue Test Utils 添加到现有的 Vue-CLI 3 项目中?

如何使用 Jest 和 react-testing-library 测试 useRef?

如何在使用 react-testing-library 和 jest 完成的单元测试中启用 react-i18n 翻译文件?

如何使用 Vue-test-utils 和 Jest 测试 Vuex 突变