首页 > 解决方案 > 开玩笑忽略除 1 个包之外的所有 node_modules

问题描述

我正在使用 jest 进行测试,目前我可以忽略 node_modules。然而,问题是 node_modules 中有 1 个包我想用 babel 进行转译。现在我忽略的模式看起来像这样:

testPathIgnorePatterns: ['./node_modules/'],

如果我的包被称为“我的包”,我怎样才能让它 testPathIgnorePatterns 不会在 node_modules 中忽略它?

标签: testingjestjsbabeljs

解决方案


TL;DR - 将此配置键与此正则表达式一起使用:

transformIgnorePatterns: ['/node_modules\/(?!my-package)(.*)']

这是一个两部分的答案。

第1部分

testPathIgnorePatterns键需要一个字符串/正则表达式数组,所以我可以传递一个正则表达式,它将匹配所有 node_modules,除了我想要的一个,如下所示:

// one way to do it
testpathIgnorePatterns: ['/node_modules\/(?!my-package).+\.js$']

// another way to do it - this regex seems simpler to me
testpathIgnorePatterns: ['/node_modules\/(?!my-package)(.*)']

这基本上是说,忽略除 my-package 之外的所有 node_modules。但是,这里要注意的是,testPathIgnorePatterns它并不能确定一个模块是否应该被 babel 转译。这个键是用来开玩笑地知道你的测试文件在哪里。基本上,使用这个键,你是在告诉 jest '不要查找node_modules带有.test.js扩展名的文件',因为你不想运行导入的 node_module 包的测试。

因此,实际上,您希望完全忽略此设置,因为 jest 会自动将其默认为['/node_modules/'],或者如果您想添加其他要忽略的路径,您需要:

testpathIgnorePatterns: ['other/file/path', '/node_modules/']

第2部分

鉴于第 1 部分的上下文,放置正则表达式以允许 jest 从 node_modules 转换特定包的正确位置是transformIgnorePatterns:所以它看起来像这样:

transformIgnorePatterns: ['/node_modules\/(?!my-package)(.*)']

这样,jest 不会转译除“my-package”之外的任何 node_modules 包。我相信上面提到的两个键的默认值都是“node_modules”——意思是,node_modules 在testPathtransform

这些配置设置的 Jest 文档


推荐阅读