您如何以编程方式和异步方式定义 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 测试?的主要内容,如果未能解决你的问题,请参考以下文章
我如何使用 Mocha 和 Chai 对 Node 创建的端点进行异步测试?