在使用yargs
(v4.12.0)的同时测试here命令模块(建议使用mock-fs
library)时似乎出现问题。
要重现此问题,这里是一个最低限度的命令模块foo.ts
(使用yargs
v15.4.1):
import { Arguments } from 'yargs';
export const command = 'foo';
export function handler(args: Arguments): void {
// do stuff...
}
(您不必真正使用 fs
来触发错误。)
然后在foo.test.ts
中(使用jest
v26.1.0):
import yargs, { Argv } from 'yargs';
import mockFs from 'mock-fs';
afterEach(() => {
mockFs.restore();
});
describe('foo command', () => {
const parser = yargs.command(require('./foo')).help();
it('should be helpful', async () => {
mockFs({});
const output = await new Promise(resolve => {
parser.parse('foo --help', (error: Error, argv: Argv, output: string) => {
resolve(output);
});
});
expect(output).toContain('Show help');
});
});
运行此测试后,我得到:
FAIL src/foo.test.ts
● test command › should resolve JSON references in OpenAPI document
Cannot find module 'cliui' from '../node_modules/yargs/build/lib/usage.js'
at Resolver.resolveModule (../node_modules/jest-resolve/build/index.js:308:11)
at Object.help (../node_modules/yargs/build/lib/usage.js:167:20)
at Object.self.showHelp (../node_modules/yargs/build/lib/usage.js:435:19)
at Object.Yargs.self.showHelp (../node_modules/yargs/build/lib/yargs.js:790:15)
at ../node_modules/yargs/build/lib/yargs.js:1100:30
如果我没有打给mockFs
的电话,则测试通过。显然,mock-fs
造成了一些冲突,但是我不确定如何解决这个问题。