Jika Anda ingin menyertakan beberapa modul ke dalam Anda describe
hierarki 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 test
subdirektori 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 importTest
fungsi hanya untuk menunjukkan bagaimana itu akan mungkin untuk menangani pengulangan mengimpor beberapa modul tanpa mengetik ulang seluruh describe(... require...
hal setiap saat. The common
Modul ini dimaksudkan untuk menahan apa yang Anda butuhkan untuk digunakan dalam beberapa modul dari test suite. Sebenarnya saya tidak menggunakannya top
tetapi bisa digunakan di sana, jika perlu.
Saya akan mencatat di sini bahwa beforeEach
akan menjalankan kodenya sebelum masing-masing dan setiap tes terdaftar dengan it
apakah mereka muncul di describe
dalam top
atau mereka muncul di salah satu modul yang diimpor . Dengan --recursive
, beforeEach
kode harus disalin ke setiap modul atau mungkin Anda akan memiliki beforeEach
kaitan di setiap modul yang memanggil fungsi yang diimpor dari modul umum.
Juga, after
pengait akan berjalan setelah semua pengujian di suite. Ini tidak dapat direplikasi dengan --recursive
. Jika Anda menggunakan --recursive
dan menambahkan kode after
ke setiap modul, ini akan dijalankan satu kali per modul, bukan hanya sekali untuk keseluruhan pengujian.
Memiliki semua tes yang muncul di bawah satu top
judul tidak dapat direplikasi dengan menggunakan --recursive
. Dengan --recursive
setiap file bisa saja describe("top"
tapi ini akan membuat top
heading 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 common
seperti ini adalah sesuatu yang telah saya lakukan di beberapa rangkaian pengujian saya untuk menghindari keharusan untuk require
banyak hal berulang-ulang dan untuk menahan variabel atau fungsi hanya-baca global yang tidak menjaga status. Saya memilih untuk tidak mencemari global
objek 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 () {});