问题描述
我正在使用yargs处理传递给该应用程序的选项并以多种语言运行的命令行应用程序。
使用非英语语言环境时,测试会失败,因为测试的预期结果已使用该语言进行了硬编码。
例如,以下代码以英语返回通过的测试,但是如果将语言设置为法语,则Yargs将以法语返回错误,则测试将失败。
it('call config with no arguments', () => {
return app('config')
.then(out => expect(out).to.include('Not enough non-option arguments: got 0, need at least 1'))
})
这使我想到了我的问题。 处理这种情况的最佳实践是什么? 我一直在研究Yargs,甚至是用于翻译的y18n软件包,都没有找到解决此问题的直接方法。
我想可能的解决方案是通过y18n库对测试期望的字符串进行翻译,或者对每种受支持的语言进行测试,但是这可能是过大的了。
在这种情况下您做了什么? 我会很高兴知道!
谢谢!
1楼
Yargs有一个 ,您可以在测试过程中使用它来设置语言环境。
使用本地包装器模块执行此操作的一种方法是:
app.js
:
const yargs = require('./my-yargs');
...
args = yargs.option(...)...
...
my-yargs.js
:
let yargs = require('yargs');
if (process.env.NODE_ENV === 'test') {
yargs = yargs.locale('en')
}
module.exports = yargs;
这将导致以下输出:
$ LC_ALL=fr_FR.UTF-8 node test.js --help
Options:
--help Affiche de l'aide [booléen]
--version Affiche le numéro de version [booléen]
$ NODE_ENV=test LC_ALL=fr_FR.UTF-8 node test.js --help
Options:
--help Show help [boolean]
--version Show version number [boolean]