您如何以编程方式和异步方式定义 Mocha 测试?

Posted

技术标签:

【中文标题】您如何以编程方式和异步方式定义 Mocha 测试?【英文标题】:How do you define Mocha tests programmatically and asynchronously? 【发布时间】:2015-11-17 04:29:20 【问题描述】:

我正在尝试将一些以编程方式生成的测试与 node.js 中的 Mocha 测试框架集成。

var Promise = require('promise');

var resolved = Promise.resolve(true);

suite("Synchronously defined suite", function() 
  test("Synchronously defined test", function() 
    return resolved;
  );
);

defer(function() 
  suite("Asynch DEFINED test", function() 
    suiteSetup(function() 
      console.log("Asynch setupSuite running...");
    );

    test("Asynch Test", function() 
      console.log("Async test running...");
      return resolved;
    );
  );
);

function defer(fn) 
  console.log("Calling defer...");
  setTimeout(fn, 100);

当我执行这个时,我得到:

$ mocha --ui tdd nested-test.js 
Calling defer...


  Synchronously defined suite
    ✓ Synchronously defined test


  1 passing (4ms)

似乎 Mocha 要求所有“套件”函数在模块加载时同步执行 - 延迟调用似乎(默默地)被忽略(或者程序在调用它们之前退出)。

【问题讨论】:

【参考方案1】:

这是我想出的。它不在 mocha 下运行,而是作为一个独立的节点程序运行:

var Promise = require('promise');
var Mocha = require('mocha');

var resolved = Promise.resolve(true);
var rejected = Promise.reject(new Error("Failing test."));

defer(function() 
  console.log("Programmatic test suite creation.");
  var suite = new Mocha.Suite("Programatic Suite");
  var runner = new Mocha.Runner(suite);
  var reporter = new Mocha.reporters.Spec(runner);

  suite.addTest(new Mocha.Test("My test", function() 
    return resolved;
  ));

  suite.addTest(new Mocha.Test("My (failing) test", function() 
    return rejected;
  ));

  runner.run();
);

function defer(fn) 
  setTimeout(fn, 100);

运行时输出:

$ node deferred-test.js 
Programmatic test suite creation.

Programatic Suite
  ✓ My test
  1) My (failing) test

  1 passing (7ms)
  1 failing

  1) Programatic Suite My (failing) test:
     Error: Failing test.
      at Object.<anonymous> (deferred-test.js:5:31)
      at node.js:935:3

不过,我希望能够将此测试包含在我的应用程序中的所有(静态定义的)mocha-run 测试套件中。

【讨论】:

以上是关于您如何以编程方式和异步方式定义 Mocha 测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何以可编程方式等待进程启动端点

Jasmine (mocha) 嵌套“it”测试

我如何使用 Mocha 和 Chai 对 Node 创建的端点进行异步测试?

在整个 mocha 测试之前运行异步代码

TestNG:如何以编程方式运行自定义 TestNG.XML 文件

在 mocha 中,如何在执行另一个测试之前等待异步测试结束?