使用Mock-fs和Jest测试yargs命令时找不到模块'cliui'

时间:2020-07-27 14:03:15

标签: node.js typescript mocking jestjs yargs

在使用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造成了一些冲突,但是我不确定如何解决这个问题。

0 个答案:

没有答案