首页 > 解决方案 > 如何在打字稿中正确地对 yargs 进行单元测试

问题描述

我需要解释两点 - 如何在不使用已弃用的 .reset() 方法的情况下重置 yargs;(.global() 方法,但是如何??) - 如何将命令行传递给用户输入的 yargs

给定以下测试:

import * as yargs from 'yargs';
describe.only('how to write a unit test for yargs with typescript', () => {
  beforeEach(() => {
    yargs.reset(); // No, but how do we get a new yargs instance?
  });
  it('yargs', () => {
    const usernameOption = {
      alias: 'username',
      describe: 'website username'
    };
    // (['login', '-u', 'jimmy']) => where does this go, without causing a build error
    // TS2349: This expression is not callable
    //
    yargs.command('login', 'login to website', (y: yargs.Argv): yargs.Argv => {
      return y.option('u', usernameOption);
    });
    console.log(`>>> ${JSON.stringify(yargs.argv)}`);

    // the above outputs:
    // >>> result: {"_":[],"$0":"/Users/Plastikfan/dev/github/js/aergia-cli-ts/node_modules/.bin/mocha"}
    //
    // how to reset yargs without using deprecated .reset() method?
    // => .global() ?
    //
  });
});

如果我尝试将命令行传递给 yargs:

    yargs(['login', '-u', 'jimmy']).command('login', 'login to website', (y: yargs.Argv): yargs.Argv => {
      return y.option('u', usernameOption);
    });

我看到以下错误“TS2349:此表达式不可调用”:

/Users/Plastikfan/dev/github/js/aergia-cli-ts/tests/yargs/yargs-builder.impl.spec.ts ./tests/yargs/yargs-builder.impl.spec.ts [tsl] 中的错误/Users/Plastikfan/dev/github/js/aergia-cli-ts/tests/yargs/yargs-builder.impl.spec.ts(89,5) TS2349 中的错误:此表达式不可调用。输入'{默认值:Argv<{}>; 别名(shortName: K1, longName: K2 | readonly K2[]): Argv<{ [key in K2]: {}[K1]; }>; 别名(短名称:K2,长名称:K1 | 只读 K1[]):Argv<...>; alias(shortName: string | readonly string[], longName: string | readonly st...' 没有调用签名。

我一直在扫描其他 yargs 单元测试,我在 yargs 中发现了这些测试:yargs completion tests

尤其是:

yargs(['./completion', '--get-yargs-completions', 'apple'])

即yargs被调用(),但这是我在打字稿测试中尝试时得到错误的地方。请注意,引用的示例是一个 javascript 测试,它还使用了 beforeEach 中已弃用的 .reset() 函数。

我最初在 tsconfig 中有“esModuleInterop”:true,但将其设置为 false 没有任何区别。

标签: typescriptunit-testingyargs

解决方案


推荐阅读