Jest报错:moduleName.startsWith is not a function 问题排查
Jest测试通过但弹出
TypeError: moduleName.startsWith is not a function警告 环境配置
- 操作系统:macOS
- Jest版本:
$ jest --version 29.4.2
操作背景
全局安装依赖:
npm install -g node-red npm install -g node-red-node-test-helper
为调用Node-RED的node-red-node-test-helper工具进行测试,我封装了FlowTester类:
class FlowTester { constructor() { this.helper = require(Path.resolve(`${globalNodeModuleDir}/node-red-node-test-helper`)); } init() { this.helper.init(require(Path.resolve(`${globalNodeModuleDir}/node-red`))); } defineDefaultFixtureForEach() { beforeEach((done) => { this.helper.startServer(done); }); afterEach((done) => { this.helper.unload().then(() => { this.helper.stopServer(done); }); }); } // 省略其他代码 }
注:因架构设计限制,
node-red-node-test-helper无法作为本地依赖安装,只能全局安装,因此使用绝对路径引入。
在测试的自定义NodeJS节点包package.json中配置测试命令:
{ // 省略其他配置内容 "scripts": { "test": "jest" }, // 省略其他配置内容 }
执行测试命令:
cd my_node npm test
问题
所有Jest测试均能正常通过,但会弹出以下警告错误:
console.log 16:03:44 TypeError: moduleName.startsWith is not a function 16:03:44 at Resolver.isCoreModule (/usr/local/lib/node_modules/jest/node_modules/jest-resolve/build/resolver.js:452:20) 16:03:44 at Resolver._getModuleType (/usr/local/lib/node_modules/jest/node_modules/jest-resolve/build/resolver.js:576:17) 16:03:44 at Resolver.getModuleID (/usr/local/lib/node_modules/jest/node_modules/jest-resolve/build/resolver.js:529:29) 16:03:44 at Runtime._shouldMockCjs (/usr/local/lib/node_modules/jest/node_modules/jest-runtime/build/index.js:1815:37) 16:03:44 at Runtime.requireModuleOrMock (/usr/local/lib/node_modules/jest/node_modules/jest-runtime/build/index.js:1145:16) 16:03:44 at NodeTestHelper._initRuntime (/usr/local/lib/node_modules/node-red-node-test-helper/index.js:89:37) 16:03:44 at NodeTestHelper.init (/usr/local/lib/node_modules/node-red-node-test-helper/index.js:148:18) 16:03:44 at FlowTester.init (/Users/me/_util/node/_flowtest.js:18:15) 16:03:44 at Object.init (/Users/me/my_service/node/test/default/flow.test.js:16:9) 16:03:44 at Runtime._execModule (/usr/local/lib/node_modules/jest/node_modules/jest-runtime/build/index.js:1539:24) 16:03:44 at Runtime._loadModule (/usr/local/lib/node_modules/jest/node_modules/jest-runtime/build/index.js:1122:12) 16:03:44 at Runtime.requireModule (/usr/local/lib/node_modules/jest/node_modules/jest-runtime/build/index.js:982:12) 16:03:44 at jestAdapter (/usr/local/lib/node_modules/jest/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:77:13) 16:03:44 at processTicksAndRejections (internal/process/task_queues.js:95:5) 16:03:44 at runTestInternal (/usr/local/lib/node_modules/jest/node_modules/jest-runner/build/runTest.js:367:16) 16:03:44 at runTest (/usr/local/lib/node_modules/jest/node_modules/jest-runner/build/runTest.js:444:34) 16:03:44 16:03:44 at NodeTestHelper._initRuntime (../../../../../../../../usr/local/lib/n
分析
这是类型错误,但调用栈中出现“mock”关键字,我并未主动调用任何Mock API,这点存疑。
求助
我在Stack Overflow未找到相关解决方案,不清楚封装FlowTester类为何会引发该问题,是否是全局包的引入方式有误?
内容的提问来源于stack exchange,提问作者kakyo
相关产品推荐
相关产品推荐

