Birden modülleri eklemek istiyorsanız içine senin describesenin soru yapıyorsun gibi hiyerarşi, ne yapıyorsun oldukça fazla olduğunu o size Mocha için özel bir test yükleyici yazmak istemiyorsan. Özel yükleyiciyi yazmak daha kolay olmaz veya kodunuzu sahip olduğunuzdan daha net hale getirmez.
İşte birkaç şeyi nasıl değiştirebileceğime dair bir örnek. testBu örnekte, alt-klasör şekilde düzenlenmiştir:
.
└── 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");
});
});
importTestFonksiyon sadece bütün yeniden yazmak zorunda kalmadan birden fazla modülleri ithal tekrarını işlemek mümkün olacağını nasıl göstermek için describe(... require...şeyi her seferinde. commonModül test paketi birden modüllerde kullanmak için gerekenleri barındırma anlamına gelir. Aslında içinde kullanmıyorum topama gerekirse orada kullanılabilir.
Burada, beforeEachkaydedilen her bir testten önce it, içeriğin describeiçinde mi topyoksa içe aktarılan modüllerin herhangi birinde mi göründükleriyle birlikte kodunu çalıştıracağını not edeceğim . İle --recursive, beforeEachkodun her modüle kopyalanması gerekir veya belki de beforeEachher modülde ortak bir modülden içe aktarılan bir işlevi çağıran bir kancanız olur.
Ayrıca, afterçengel süitteki tüm testlerden sonra çalışacaktır . Bu, ile çoğaltılamaz --recursive. Her modüle --recursivekodunu kullanır ve eklerseniz after, tüm test için yalnızca bir kez yerine modül başına bir kez çalıştırılır .
Tüm testlerin tek bir topbaşlık altında görünmesi kullanılarak çoğaltılamaz --recursive. İle --recursiveher dosya olabilir describe("top"ama bu yeni yaratacak topher dosya için başlık.
common.js:
var chai = require("chai");
var options = {
foo: "foo"
};
exports.options = options;
exports.chai = chai;
exports.assert = chai.assert;
Bu şekilde adlandırılmış bir modül kullanmak common, bazı test takımlarımda requiredefalarca bir sürü şeyden kaçınmak ve durumu tutmayan küresel salt okunur değişkenleri veya işlevleri tutmak için yaptığım bir şey. globalNesneyi thgaskell'in cevabında olduğu gibi kirletmemeyi tercih ederim çünkü bu nesne gerçekten geneldir ve kodunuzun yüklediği üçüncü şahıs kitaplıklarında bile erişilebilirdir. Bu benim kodumda kabul edilebilir bulduğum bir şey değil.
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 () {});