Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jest测试运行-找不到模块错误_Javascript_Typescript_Jestjs - Fatal编程技术网

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

Javascript Jest测试运行-找不到模块错误,javascript,typescript,jestjs,Javascript,Typescript,Jestjs,我一直在做React-Typescript repo,遇到了一个恼人的问题,jest无法解决相对于根目录的导入 Cannot find module '~lib/dates' from 'utils.ts' 这就是导入在组件/utils中的样子 import { abc } from '~lib/dates'; // this fails to run 如果我将其更改为相对路径,jest测试运行将按预期工作 import { abc } from '../../lib/dates';

我一直在做React-Typescript repo,遇到了一个恼人的问题,jest无法解决相对于根目录的导入

 Cannot find module '~lib/dates' from 'utils.ts'
这就是导入在组件/utils中的样子

import { abc } from '~lib/dates';   // this fails to run
如果我将其更改为相对路径,jest测试运行将按预期工作

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"
    }
}

忘记
~
字符

首先开玩笑(即
src/

然后从根目录导入你的东西;(例如,
从'lib/dates'导入{abc}

顺便说一句,您可以始终从默认根目录导入您的内容,而无需任何如下配置:
import{abc}from'src/lib/dates'


如果您正在使用create react app,请进一步阅读,忘记
~
字符

首先开玩笑(即
src/

然后从根目录导入你的东西;(例如,
从'lib/dates'导入{abc}

顺便说一句,您可以始终从默认根目录导入您的内容,而无需任何如下配置:
import{abc}from'src/lib/dates'


如果您使用的是create react app,请进一步阅读,您的实现看起来是正确的。但是看起来选项
moduleNameWrapper
是错误的选项,应该是
moduleNameMapper

我还有一个和你一样的例子,它也使用babel作为transplier,当我添加了
moduleNameMapper
时,它工作得很好。以下是我的例子:

Jest配置:

以下是用于测试的文件:


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

我还有一个和你一样的例子,它也使用babel作为transplier,当我添加了
moduleNameMapper
时,它工作得很好。以下是我的例子:

Jest配置:

以下是用于测试的文件:


您的回购结构是什么样的?您使用的是哪种传送器?Babel还是Tsc?我使用的是mono回购协议,Babel作为一种传输工具。将用目录结构更新帖子。您的回购结构是什么样子的?您使用的是什么transpiler?Babel还是Tsc?我使用的是mono回购协议,Babel作为一种传输工具。将使用目录结构更新帖子。根目录已在repo中定义,即
/src
,在本例中为客户端目录。这不是关于导入,而是如何解决自动导入以使用IDE。检查所有文件,然后更新导入是一件痛苦的事情。此外,我们在不使用
create react app
@Sushanth的情况下剥离了repo——如果根目录为jest正确定义,那么您可以直接跳到步骤2。问题是,如果这是一个个人项目,我不介意这样做。但对于团队中的其他成员来说,这并不是个人的偏好。很确定这会奏效,但这不是我真正想要的答案。还有一个要点是,继续更新大约400个不同的版本是一件痛苦的事情files@Sushanth--嗯,是的,手动更换是不现实的。顺便说一句,如果您没有找到您要查找的答案,请尝试在导入URL的编辑器搜索和替换功能中将
“~
替换为
src/
,如果根目录设置正确,此更改不会破坏任何内容。根目录已在repo中定义,即
/src
,在本例中,是客户端目录。这不是关于导入,而是如何解决自动导入以使用IDE。检查所有文件,然后更新导入是一件痛苦的事情。此外,我们在不使用
create react app
@Sushanth的情况下剥离了repo——如果根目录为jest正确定义,那么您可以直接跳到步骤2。问题是,如果这是一个个人项目,我不介意这样做。但对于团队中的其他成员来说,这并不是个人的偏好。很确定这会奏效,但这不是我真正想要的答案。还有一个要点是,继续更新大约400个不同的版本是一件痛苦的事情files@Sushanth--嗯,是的,手动更换是不现实的。顺便说一句,如果你没有找到你想要的答案,试着用导入URL中的
src/
替换
'~
,使用编辑器搜索和替换功能,如果根目录设置正确,这个更改不会破坏任何东西。我是怎么想的。我完全忽略了API,这一点我从未想过。在更新选项名称后尝试,并且有效。非常感谢!我在想什么。我完全忽略了API,这一点我从未想过。在更新选项名称后尝试,并且有效。非常感谢!
repo
  server
  client
    src
       components
       lib
       utils
    package.json