jestjs - Jest 无法测试指挥官帮助功能
问题描述
由于jest
我无法测试commander
导致进程退出的模块功能。
例如,如果我传递了--help
选项或无效参数-x
(见下文)process.exit
,或者process.stdout.write
没有被调用,因为他们应该查看commander
源代码。
import {Command} from "commander";
let mockExit: jest.SpyInstance;
let mockStdout: jest.SpyInstance;
beforeAll(() => {
mockExit = jest.spyOn(process, "exit").mockImplementation();
mockStdout = jest.spyOn(process.stdout, "write").mockImplementation();
});
afterAll(() => {
mockExit.mockRestore();
mockStdout.mockRestore();
});
test("Ask for help", () => {
// Setup
const save = JSON.parse(JSON.stringify(process.argv));
process.argv = ["--help"]; // Same setting it to "-x"
const program = new Command();
program
.option("-v, --verbose [level]", "verbose level")
.parse(process.argv);
expect(mockExit).toBeCalled();
// expect(mockStdout).toBeCalled();
// Cleanup
process.argv = save;
});
奇怪的是,从其他测试的行为来看,process.argv
在这一次之后并没有恢复。测试在打字稿中并通过ts-jest
. 有任何想法吗?谢谢!
解决方案
我建议你使用.exitOverride()
,这是 Commander 在自己的测试中使用的方法。这意味着提前“终止”是通过投掷而不是退出。
第一个问题(来自评论)是论点。Commander 期望解析参数遵循节点的约定,其中 argv[0] 是应用程序,argv[1] 是正在运行的脚本,之后是用户参数。
所以而不是:
argsToParse = ["--help"];
就像是:
argsToParse = ['node", "dummy.js", "--help"];
(不需要这样修改process.argv
。)
推荐阅读
- reactjs - 如何使用 Typescript 在 React Router v5 中传递道具来路由?
- html - 调整表格页脚高度
- git - 更改不属于我自己的分支:Push 还是 PR?
- r - 使用gather创建聚集条形图时出错
- python - 如何解决“私人测试用例”PySchool
- python - 如何在python中使用beautifulsoup在python中循环url
- c# - 如何按照接收时间降序接收消息
- python - 从 Python 编写 VTK 文件以在 Paraview 中使用
- authentication - 检查用户是否在 .net Core 2.2 中通过 Windows 身份验证
- postgresql - postgres查询中的多个命名窗口