1

我正在开发一个命令行应用程序,该应用程序使用 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 库进行翻译,或者可能对每种支持的语言进行测试,但这可能有点矫枉过正。

在这种情况下你做了什么?我愿意知道!

谢谢!

4

1 回答 1

1

Yargs 有一个locale()方法 ,您可以在测试期间使用它来设置语言环境。

使用本地包装器模块执行此操作的一种方法是:

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]
于 2019-09-04T16:32:07.027 回答