当前位置: 代码迷 >> JavaScript >> 如何对使用yargs的应用程序提供多种语言环境/语言的正确响应进行单元测试?
  详细解决方案

如何对使用yargs的应用程序提供多种语言环境/语言的正确响应进行单元测试?

热度:79   发布时间:2023-06-06 10:24:19.0

我正在使用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库对测试期望的字符串进行翻译,或者对每种受支持的语言进行测试,但是这可能是过大的了。

在这种情况下您做了什么? 我会很高兴知道!

谢谢!

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]
  相关解决方案