从Sinon迁移至node:test,Mock process argv触发类型错误求助
解决node:test mock process.argv的错误问题
你的代码存在两个关键问题,导致触发TypeError [ERR_INVALID_ARG_VALUE]:
问题分析
- 错误引用了
Process(大写P),应该使用Node.js全局的process对象(小写p)。 mock.getter的调用语法错误,正确格式应为mock.getter(目标对象, 属性名),然后通过.mockImplementation定义返回值。
正确实现代码
import { mock } from 'node:test'; // 对process的argv getter进行mock const argvMock = mock.getter(process, 'argv').mockImplementation(() => [ 'node-path', 'application-entry', 'first-arg' ]); // 测试逻辑... // 测试结束后恢复mock,避免影响其他测试 argvMock.restore();
补充说明
- node:test的mock会在测试函数执行完毕后自动清理,但显式调用
restore()可以更安全地控制生命周期。 - 如果是在测试套件中使用,也可以结合测试的
beforeEach/afterEach钩子来管理mock的创建和销毁:
import { describe, it, mock } from 'node:test'; describe('测试process.argv', () => { let argvMock; beforeEach(() => { argvMock = mock.getter(process, 'argv').mockImplementation(() => [ 'node-path', 'application-entry', 'first-arg' ]); }); afterEach(() => { argvMock.restore(); }); it('验证argv被正确mock', () => { console.log(process.argv); // 输出['node-path', 'application-entry', 'first-arg'] // 你的测试断言... }); });
内容的提问来源于stack exchange,提问作者myol
相关产品推荐
相关产品推荐

