【问题标题】:Testing CLI app with mocha.js使用 mocha.js 测试 CLI 应用程序
【发布时间】:2014-09-01 04:56:30
【问题描述】:

我想测试一个 CLI 应用程序并希望在测试运行时接收用户输入,因为 mocha.js 有 200 毫秒的限制测试失败。所以我想知道如何在脚本获取输入时停止测试并在获取后恢复。

【问题讨论】:

  • 你写什么样的测试?作为一般规则,自动化测试永远不应该依赖于用户输入而只能自己运行,因此您可以经常运行它们。并不是说您不应该编写异步测试,而是请考虑硬编码您的用户必须在测试代码中输入的输入。
  • 我正在创建一个选项解析器,它会在出现验证错误时提示用户输入,我想模拟它。正如 Bulkan 指出的那样,我会看到 stream-expect 并查看它是否有效。

标签: javascript node.js unit-testing mocha.js


【解决方案1】:

您可以像这样增加测试超时时间;

describe('increased timeout', function(){
  it('should not timeout', function(done){
    this.timeout(2000);
    setTimout(done, 1500);
  });
});

但我不建议你这样做。您可以使用nexpectstream-expect 来模拟用户输入。这样你就可以编写很多自动化测试。

stream-expect的用法示例

【讨论】:

    【解决方案2】:

    您的测试运行器可以添加超时参数,类似于此。

    mocha -r ts-node/register test/index.ts **--timeout 15000** --reporter mochawesome

    【讨论】:

      【解决方案3】:

      你应该让你的测试异步。添加 done 参数并在完成后调用它。 http://visionmedia.github.io/mocha/ - 检查异步代码部分的示例。

      http://jsfiddle.net/iskomorokh/3jnoyovb/9/

      @UPDATE 基于反馈:

      可以通过这种方式禁用超时:

      this.enableTimeouts(false);
      

      这是一个link 文档

      【讨论】:

      • 进行异步测试无济于事,因为如果用户响应速度不够快,无法在超时延迟之前调用done(),Mocha 仍会超时。
      • @Louis 检查一下,请:it('Prompt', function (done) { var person = prompt("Please enter your name", "Harry Potter"); if (person) {done()}; }); 如果您等待事件 10 秒,如果您提供名称,测试不会因超时而失败。
      • 如果您有一个完整且经过测试的示例来说明您的建议,那么请将其放入您的答案中。
      • 在我的原始答案中提供了链接。
      • 该小提琴的关键部分是调用this.enableTimeouts(false);,您在解释中根本没有提及。您的解释使它看起来像 only 需要的事情是使测试异步,但事实并非如此。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 2017-11-07
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多