Jika Anda ingin menyertakan beberapa modul ke dalam Anda describehierarki seperti yang Anda lakukan dalam pertanyaan Anda, apa yang Anda lakukan adalah cukup banyak itu , kecuali jika Anda ingin menulis tes kustom loader untuk Mocha. Menulis pemuat khusus tidak akan lebih mudah atau membuat kode Anda lebih jelas daripada yang sudah Anda miliki.
Berikut adalah contoh bagaimana saya mengubah beberapa hal. The testsubdirektori dalam contoh ini disusun sebagai:
.
└── 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");
});
});
The importTestfungsi hanya untuk menunjukkan bagaimana itu akan mungkin untuk menangani pengulangan mengimpor beberapa modul tanpa mengetik ulang seluruh describe(... require...hal setiap saat. The commonModul ini dimaksudkan untuk menahan apa yang Anda butuhkan untuk digunakan dalam beberapa modul dari test suite. Sebenarnya saya tidak menggunakannya toptetapi bisa digunakan di sana, jika perlu.
Saya akan mencatat di sini bahwa beforeEachakan menjalankan kodenya sebelum masing-masing dan setiap tes terdaftar dengan itapakah mereka muncul di describedalam topatau mereka muncul di salah satu modul yang diimpor . Dengan --recursive, beforeEachkode harus disalin ke setiap modul atau mungkin Anda akan memiliki beforeEachkaitan di setiap modul yang memanggil fungsi yang diimpor dari modul umum.
Juga, afterpengait akan berjalan setelah semua pengujian di suite. Ini tidak dapat direplikasi dengan --recursive. Jika Anda menggunakan --recursivedan menambahkan kode afterke setiap modul, ini akan dijalankan satu kali per modul, bukan hanya sekali untuk keseluruhan pengujian.
Memiliki semua tes yang muncul di bawah satu topjudul tidak dapat direplikasi dengan menggunakan --recursive. Dengan --recursivesetiap file bisa saja describe("top"tapi ini akan membuat topheading baru untuk tiap file.
common.js:
var chai = require("chai");
var options = {
foo: "foo"
};
exports.options = options;
exports.chai = chai;
exports.assert = chai.assert;
Menggunakan modul bernama commonseperti ini adalah sesuatu yang telah saya lakukan di beberapa rangkaian pengujian saya untuk menghindari keharusan untuk requirebanyak hal berulang-ulang dan untuk menahan variabel atau fungsi hanya-baca global yang tidak menjaga status. Saya memilih untuk tidak mencemari globalobjek seperti dalam jawaban thgaskell karena objek ini benar-benar global dan dapat diakses bahkan di pustaka pihak ketiga yang mungkin memuat kode Anda. Ini bukanlah sesuatu yang menurut saya dapat diterima dalam kode saya.
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 () {});