如何修复TypeError [ERR_INVALID_ARG_TYPE]:"original"参数类型报错
问题描述
通过CLI运行E2E测试时抛出如下报错,相同测试用例在本地环境可正常执行,报错堆栈信息如下:
TypeError [ERR_INVALID_ARG_TYPE]: The "original" argument must be of type Function. Received type undefined at Object.promisify (internal/util.js:256:11) at Object.<anonymous> (D:\Octopus\Applications\Staging\e2e\0.0.108\node_modules\testcafe\node_modules\testcafe-hammerhead\lib\utils\promisified-functions.js:16:33) at Module._compile (internal/modules/cjs/loader.js:689:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) at Module.load (internal/modules/cjs/loader.js:599:32) at tryModuleLoad (internal/modules/cjs/loader.js:538:12) at Function.Module._load (internal/modules/cjs/loader.js:530:3) at Module.require (internal/modules/cjs/loader.js:637:17) at require (internal/modules/helpers.js:22:18) at Object.<anonymous> (D:\Octopus\Applications\Staging\e2e\0.0.108\node_modules\testcafe\node_modules\testcafe-hammerhead\lib\request-pipeline\file-request\base-resource.js:7:33)
已尝试将npm、Node.js、testcafe、testcafe-hammerhead全部更新至最新版本,问题仍未解决。
排查修复方案
按优先级从高到低依次排查:
- 对齐本地与Staging部署环境的Node.js版本。分别在本地和Staging机器执行
node -v核对版本,必须保证两边主版本完全一致。该报错的核心原因是util.promisify接收到的待包装参数不是函数,绝大多数场景由Node版本不匹配触发:testcafe-hammerhead特定版本对Node最低版本有明确要求,若本地使用Node 16/18运行正常,Staging环境安装的是Node 10及以下低版本,或是在高版本Node环境下安装依赖后直接将node_modules拷贝到低版本Node环境运行,就会触发该参数类型错误。 - 禁止跨环境拷贝
node_modules目录,在Staging环境重新纯净安装依赖。跨机器、跨系统拷贝node_modules很容易出现软链接失效、平台适配二进制包不匹配、嵌套依赖路径错乱的问题,这也是Octopus部署Node项目时的高频踩坑点。进入Staging的部署目录,先删除整个node_modules文件夹,若存在package-lock.json锁文件则执行npm ci安装,无锁文件则执行npm install全量拉取依赖,安装完成后重新运行测试。 - 排查依赖版本冲突。执行
npm ls testcafe-hammerhead查看依赖树中实际安装的testcafe-hammerhead版本,确认是否存在多版本共存、版本被锁死在和当前testcafe版本不兼容的旧版的情况。若存在版本错配,npm 8.3及以上版本可在package.json中添加overrides字段,yarn用户添加resolutions字段,强制将所有嵌套引用的testcafe-hammerhead版本锁定为与当前安装testcafe匹配的版本。 - 校验报错文件完整性。手动打开报错路径下的
promisified-functions.js文件,定位到第16行,和本地正常运行环境下同版本文件的对应行内容做对比,确认文件没有在传输过程中被截断、或是被服务器上的安全软件篡改。如果文件内容不一致,重新安装对应依赖包即可。 - 检查Windows目录权限。确认Staging环境运行测试的账号对整个部署目录拥有完整的读取、执行权限,Windows环境下权限不足导致部分模块加载失败时,也会抛出参数为undefined的类型错误,给运行账号分配目录完全控制权限后重试。
这类本地运行正常、部署环境报错的问题,90%以上都是环境版本不一致、依赖未在对应环境重新安装导致的,优先排查前两步即可快速定位解决。
内容的提问来源于stack exchange,提问作者Shane
相关产品推荐
相关产品推荐

