Jest 以不同于 Node.js 的顺序解析模块路径
Jest resolves module paths in different order than Node.js
在我的 Node.js 项目中,我安装了一个 passport
包和我自己的 config/passport.js
文件,其中配置了 Passport 策略以及 config/config.js
中的应用程序配置。
我将 NODE_PATH
设置为 app:config
(我在 Ubuntu 16.04)所以当我 运行 使用 Node 的应用程序时,我可以 require('passport')
需要 Passport.js 包并且 require('config')
需要我的应用程序的配置。
到目前为止一切顺利,但是当我 运行 使用 Jest 进行测试并将我的 modulePaths
设置为 app
和 config
时,require('passport')
调用解析到 config/passport.js
这(如您所想)使应用程序崩溃。
为什么 Jest 在需要包时会在 node_modules
之前查看 modulePaths
?这怎么能解决呢?我尝试将 node_modules
添加到 Jest 的 modulePaths
,但它造成的麻烦多于解决的问题。
我尝试查看 Jest 的代码但没有结果。
所以 Jest 只是按照我在问题中描述的顺序加载模块。
对于解决类似问题的任何人 - 这在未来应该不再是问题,因为我创建了一个问题和 PR,该问题和 PR 已被批准并合并到 Jest 的主人。
https://github.com/facebook/jest/issues/5377
它现在是 Jest 的一部分 - 版本 22.2.0 和更新版本。
在我的 Node.js 项目中,我安装了一个 passport
包和我自己的 config/passport.js
文件,其中配置了 Passport 策略以及 config/config.js
中的应用程序配置。
我将 NODE_PATH
设置为 app:config
(我在 Ubuntu 16.04)所以当我 运行 使用 Node 的应用程序时,我可以 require('passport')
需要 Passport.js 包并且 require('config')
需要我的应用程序的配置。
到目前为止一切顺利,但是当我 运行 使用 Jest 进行测试并将我的 modulePaths
设置为 app
和 config
时,require('passport')
调用解析到 config/passport.js
这(如您所想)使应用程序崩溃。
为什么 Jest 在需要包时会在 node_modules
之前查看 modulePaths
?这怎么能解决呢?我尝试将 node_modules
添加到 Jest 的 modulePaths
,但它造成的麻烦多于解决的问题。
我尝试查看 Jest 的代码但没有结果。
所以 Jest 只是按照我在问题中描述的顺序加载模块。
对于解决类似问题的任何人 - 这在未来应该不再是问题,因为我创建了一个问题和 PR,该问题和 PR 已被批准并合并到 Jest 的主人。
https://github.com/facebook/jest/issues/5377
它现在是 Jest 的一部分 - 版本 22.2.0 和更新版本。