我需要解释两点 - 如何在不使用已弃用的 .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 没有任何区别。