使用create-jest-runner创建Jest自定义运行器时遇未定义属性读取错误
使用create-jest-runner自定义Jest运行器时触发TypeError错误
错误堆栈
TypeError: Cannot read properties of undefined (reading 'startsWith') at new Worker (/Users/redacted/git/redacted/redacted/redacted/node_modules/create-jest-runner/node_modules/jest-worker/build/index.js:120:20) at BaseTestRunner._createParallelTestRun (/Users/redacted/git/redacted/redacted/redacted/node_modules/create-jest-runner/build/createJestRunner.js:63:22) at BaseTestRunner.runTests (/Users/redacted/git/redacted/redacted/redacted/node_modules/create-jest-runner/build/createJestRunner.js:40:119) at TestScheduler.scheduleTests (/Users/redacted/git/redacted/redacted/redacted/node_modules/@jest/core/build/TestScheduler.js:331:30) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async runJest (/Users/redacted/git/redacted/redacted/redacted/node_modules/@jest/core/build/runJest.js:376:19) at async _run10000 (/Users/redacted/git/redacted/redacted/redacted/node_modules/@jest/core/build/cli/index.js:416:7) at async runCLI (/Users/redacted/git/redacted/redacted/redacted/node_modules/@jest/core/build/cli/index.js:271:3) at async Object.run (/Users/redacted/git/redacted/redacted/redacted/node_modules/jest-cli/build/cli/index.js:163:37)
错误在自定义runner逻辑执行前就触发,排查不到相关修复文档,应该是遗漏了配置或版本不兼容。
环境依赖
jest: ^26.6.3create-jest-runner: ^0.12.3
相关代码
custom-runner.js
const { createJestRunner } = require("create-jest-runner"); const runner = async ({ testPath }) => { // Do Something }; module.exports = createJestRunner(runner);
jest.config.js
module.exports = { ...regularSettings, runner: "./custom-runner.js", };
解决方案
这个问题的核心是版本不兼容:create-jest-runner@0.12.x是为Jest 28+版本设计的,和你当前使用的Jest 26.x在jest-worker的调用逻辑上存在冲突,导致初始化Worker时抛出未定义属性的错误。
你可以选择以下两种修复方式:
降级create-jest-runner到适配版本
安装支持Jest 26.x的create-jest-runner@0.10.x系列:npm install create-jest-runner@^0.10.0 --save-dev该版本会自动匹配Jest 26.x的依赖结构,避免Worker初始化错误。
升级Jest到兼容版本
将Jest升级到28.x或更高版本,确保和create-jest-runner@0.12.x的版本匹配:npm install jest@^28.0.0 --save-dev注意:升级后需要检查原有Jest配置和测试用例,部分API在Jest 28中有变更(比如
testEnvironment默认值改为node)。
如果暂时无法调整版本,也可以尝试在自定义runner中显式指定Worker路径,但版本匹配是最彻底的解决办法。
内容的提问来源于stack exchange,提问作者Jkaram
相关产品推荐
相关产品推荐

