Birden modülleri eklemek istiyorsanız içine senin describe
senin 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. test
Bu ö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");
});
});
importTest
Fonksiyon 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. common
Modül test paketi birden modüllerde kullanmak için gerekenleri barındırma anlamına gelir. Aslında içinde kullanmıyorum top
ama gerekirse orada kullanılabilir.
Burada, beforeEach
kaydedilen her bir testten önce it
, içeriğin describe
içinde mi top
yoksa içe aktarılan modüllerin herhangi birinde mi göründükleriyle birlikte kodunu çalıştıracağını not edeceğim . İle --recursive
, beforeEach
kodun her modüle kopyalanması gerekir veya belki de beforeEach
her 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 --recursive
kodunu 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 top
başlık altında görünmesi kullanılarak çoğaltılamaz --recursive
. İle --recursive
her dosya olabilir describe("top"
ama bu yeni yaratacak top
her 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 require
defalarca 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. global
Nesneyi 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 () {});