Jest 测试运行 - 找不到模块错误

Sus*_* -- 5 javascript typescript jestjs

我一直在研究 React Typescript 存储库,并且遇到了一个恼人的问题,即开玩笑时无法解析相对于根目录的导入。

 Cannot find module '~lib/dates' from 'utils.ts'
Run Code Online (Sandbox Code Playgroud)

这就是组件/实用程序中导入的样子

import { abc } from '~lib/dates';   // this fails to run
Run Code Online (Sandbox Code Playgroud)

如果我将其更改为相对路径,玩笑测试将按预期运行

import { abc } from '../../lib/dates';   // this runs as expected
Run Code Online (Sandbox Code Playgroud)

同样的路径适用于其他一些目录,我有点困惑

import { xyz } from '~components/home/constants';   // jest resolves it
import { abc } from '~lib/dates';                     // ERR
Run Code Online (Sandbox Code Playgroud)

我尝试将其包含moduleNameWrapper在 jestConfig 中,看看它是否可以正确解析导入,但没有帮助。

包.json

"jest": {
   ...

   "moduleNameWrapper": {
      "^~(.*)$": "<rootDir>/src/$1"
    }
}
Run Code Online (Sandbox Code Playgroud)

我肯定可以更新 VS 代码设置,以便自动导入相对于文件而不是根目录进行解析,但这已经困扰我一段时间了。如果有人能指导如何最好地解决这个问题,那就太好了。

我在一个具有以下目录结构的 monorepo 上

repo
  server
  client
    src
       components
       lib
       utils
    package.json
Run Code Online (Sandbox Code Playgroud)

tmh*_*005 4

您的实现看起来是正确的。但看起来这个选项moduleNameWrapper是错误的,它应该是moduleNameMapper

我也有一个和你一样的例子,它也使用 babel 作为转换器,它工作得很好,就像我添加的那样moduleNameMapper。这是我的例子:

笑话配置:

https://github.com/tmhao2005/lerna-demo/blob/master/packages/share/jest.config.js

这是用于测试的文件:

https://github.com/tmhao2005/lerna-demo/blob/master/packages/helper/src/index.ts https://github.com/tmhao2005/lerna-demo/blob/master/packages/helper/src /index.test.ts

  • 接受的答案,其 github 链接不再存在。伟大的。 (2认同)