あなたが複数のモジュールを含める場合に、あなたの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
の内側に、彼らが表示されるかどうかdescribe
にtop
か、彼らがに表示され、インポートモジュールのいずれか。を使用する--recursive
と、beforeEach
コードを各モジュールにコピーする必要があります。そうでない場合はbeforeEach
、共通モジュールからインポートされた関数を呼び出すフックが各モジュールにあります。
また、after
フックはスイート内のすべてのテストの後に実行されます。これは、で複製することはできません--recursive
。--recursive
のコードを使用しafter
て各モジュールに追加すると、テスト全体で1回だけではなく、モジュールごとに1回実行されます。
すべてのテストを単一の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 () {});