使用mocha.js加入来自多个文件的测试

我试图将来自多个文件的所有测试合并到一个文件中,如下所示:

  describe('Controllers', function() {

describe('messages.js', function() {

require('./controllertests/messages').test(options);

})

describe('users.js', function() {

require('./controllertests/users').test(options);

})

})

我很确定这不是参加测试的最佳方式,我很难找到如何执行此操作的示例:

回答:

如果你想包含多个模块 您的describe层次结构就像你在你的问题做什么,你在做什么是相当多的

,除非你想要写摩卡自定义测试装载机。编写自定义加载器不会比已有代码容易或使代码更清晰。

这是我将如何更改某些事情的示例。test本示例中的子目录组织为:

.

└── test

├── a

│   └── a.js

├── b

│   └── b.js

├── common.js

└── top.js

top.js

function importTest(name, path) {

describe(name, function () {

require(path);

});

}

var common = require("./common");

describe("top", function () {

beforeEach(function () {

console.log("running something before each test");

});

importTest("a", './a/a');

importTest("b", './b/b');

after(function () {

console.log("after all tests");

});

});

importTest功能只是说明如何处理导入多个模块的重复而不必describe(...

require...每次都重新键入整个内容。该common模块旨在容纳您需要在测试套件的多个模块中使用的模块。我实际上并没有使用它,top但是如果需要的话,可以在其中使用它。

我将在此处指出,beforeEach在每次注册每个测试之前,它们将运行其代码,it无论它们出现在describein中top还是出现在

任何导入的模块中

。使用--recursive,必须将beforeEach代码复制到每个模块中,或者您可能beforeEach在每个模块中都有一个钩子,以调用从公共模块导入的函数。

同样,该after挂钩将在套件中的

测试之后运行。无法使用复制--recursive。如果您使用--recursive并将代码添加after到每个模块,则每个模块将执行一次,而不是

整个 测试一次。

top使用不能复制所有测试出现在单个标题下的内容--recursive。随着--recursive每个文件可以有describe("top",但是这将创建一个新的top为每个文件标题。

common.js

var chai = require("chai");

var options = {

foo: "foo"

};

exports.options = options;

exports.chai = chai;

exports.assert = chai.assert;

在某些测试套件中,我使用了类似这样的 模块,common避免重复执行require一堆操作,并保留不保持状态的全局

变量或函数。我不global想像thgaskell的回答那样污染对象,因为该对象是真正的全局对象,即使在您的代码可能正在加载的第三方库中也可以访问。我在代码中发现这不是可接受的。

a/a.js

var common = require("../common");

var options = common.options;

var assert = common.assert;

it("blah a", function () {

console.log(options.foo);

assert.isTrue(false);

});

b/b.js

it("blah b", function () {});

以上是 使用mocha.js加入来自多个文件的测试 的全部内容, 来源链接: utcz.com/qa/402709.html

回到顶部