Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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
配置Jest以模拟webpack解析根和解析别名_Webpack_Jestjs - Fatal编程技术网

配置Jest以模拟webpack解析根和解析别名

配置Jest以模拟webpack解析根和解析别名,webpack,jestjs,Webpack,Jestjs,我正在用Webpack和Jest建立一个项目。目前,Webpack解析配置会导致Jest测试的复杂性。在我的网页配置中,我设置了以下选项: resolve: { root: [__dirname + "/src/" ], extensions: ['', '.js', '.coffee', '.jsx', '.css', '.scss', '.svg'] } 这使我需要具有以下功能的资产和模块: import UnknownImg from 'assets/unknow

我正在用Webpack和Jest建立一个项目。目前,Webpack解析配置会导致Jest测试的复杂性。在我的网页配置中,我设置了以下选项:

  resolve: {
    root: [__dirname + "/src/" ],
    extensions: ['', '.js', '.coffee', '.jsx', '.css', '.scss', '.svg']
  }
这使我需要具有以下功能的资产和模块:

import UnknownImg from 'assets/unknown';
上述内容实际上存在(相对于我的项目根目录)
src/assets/unknown.svg

但是,当我对具有上述行的文件运行测试时,在解析到所需模块/资源的路径时会出现错误

错误:/Users/byronsm/dev/nerve center/src/components/orbiats/system\u status.jsx:无法从'/Users/byronsm/dev/nerve center/src/components/orbiats'中找到模块'assets/unknown'。


在这种情况下,它似乎正在对导入的模块路径进行相对查找。有没有办法让Jest与Webpack表现得一样?

晚上好好休息后,我再次查看了一下,发现它不是Jest配置,而是节点。模拟webpack中resolve.root配置行为的最佳方法是在运行
jest
时将环境变量
NODE\u PATH
设置到同一目录:

NODE_PATH=src jest

这并不能真正解决多个目录的问题,它解决了我的问题。本文帮助我更好地理解了这个解决方案。

旨在通过在使用Jest运行测试文件之前使用Webpack构建测试文件来解决这个问题。这意味着您的Webpack配置中的任何特殊模块解析规则或加载程序都将以与生产构建完全相同的方式工作。

我写了一篇文章,以获取Webpack配置并连接到节点的require中,以便像Webpack一样解析路径。我还没有用jest测试过它,但它应该可以与任何在节点上运行的规范运行程序一起使用,甚至可以支持简单的加载程序。

现在正式的jest文档中提供了一个解决方案。看

简而言之,将
modulePath
选项添加到
package.json
中的jest配置中:

"jest": {
    "modulePaths": ["src"], 
    ...
}
您可以使用Jest 20+并将其插入


这个软件包看起来不成熟(已经有几天了),但它确实适合我。此外,到目前为止,它要求Jest配置文件位于单独的
Jest.config.js
文件中,或通过CLI提供(不支持
package.json
)。

Jest版本
23.6.0

将此行添加到
jest.config.js

moduleDirectories: ["node_modules", "src"],
或者在
package.json中

"jest": {
    "moduleDirectories": ["node_modules", "src"], 
    ...
}

似乎是一个不公平的标签“链接只”,我认为他们的答案是相当清晰的,没有链接本身。链接似乎是打破了。我想这就是你所指的:@clu,我已经更新了答案中的链接-希望它能通过同行评审,谢谢@jolyonruss