如果你想包含多个模块 到 您的
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 () {});
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)