【问题标题】:Jest test runs - Cannot find module error开玩笑测试运行 - 找不到模块错误
【发布时间】:2020-12-21 21:14:30
【问题描述】:

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

 Cannot find module '~lib/dates' from 'utils.ts'

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

import { abc } from '~lib/dates';   // this fails to run

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

import { abc } from '../../lib/dates';   // this runs as expected

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

import { xyz } from '~components/home/constants';   // jest resolves it
import { abc } from '~lib/dates';                     // ERR

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

package.json

"jest": {
   ...

   "moduleNameWrapper": {
      "^~(.*)$": "<rootDir>/src/$1"
    }
}

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

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

repo
  server
  client
    src
       components
       lib
       utils
    package.json

【问题讨论】:

  • 你的回购结构是什么样的?
  • 你用的是什么编译器? Babel 还是 Tsc?
  • 我正在使用带有 babel 的单声道存储库作为转译器。将使用目录结构更新帖子。

标签: javascript typescript jestjs


【解决方案1】:

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

我也有一个和你一样的例子,它也使用 babel 作为转换器,它工作正常,因为我添加了moduleNameMapper。这是我的例子:

笑话配置:

https://github.com/tmhao2005/lerna-demo/blob/master/packages/helper/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

【讨论】:

  • 我在想什么。我完全忽略了 API,但我从未想过。更新选项名称后尝试,它可以工作。非常感谢!
【解决方案2】:

忘记~ 字符;

首先define root directory 开玩笑(即src/);

然后从那个根目录导入你的东西; (例如import { abc } from 'lib/dates')

顺便说一句,您可以随时从默认根目录导入您的东西,而无需任何配置:import { abc } from 'src/lib/dates'

如果您使用的是 create-react-app jest absolute import,请进一步阅读

【讨论】:

  • 根目录已经在 ./src 的 repo 中定义,在本例中是客户端目录。它不是关于导入,而是关于如何解决自动导入以与 IDE 一起使用。查看所有文件然后更新导入是很痛苦的。此外,我们在不使用 create-react-app 的情况下拆分了 repo
  • @Sushanth--如果为jest正确定义了根目录,则可以直接跳到第2步
  • 问题是,如果这是一个个人项目,我不介意这样做。但是对于团队中的其他团队成员来说,这真的不是个人喜好。很确定它会起作用,但这不是我真正想要的答案。更重要的一点是,继续更新大约 400 个不同的文件是一件痛苦的事
  • @Sushanth--嗯,是的,手动替换它们是不切实际的。顺便说一句,如果您没有找到您正在寻找的答案,请尝试使用编辑器搜索和替换功能将导入网址中的'~ 替换为src/,如果根目录设置正确,则此更改不会破坏任何内容。
猜你喜欢
  • 2021-05-30
  • 2021-01-01
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多