आप एक से अधिक मॉड्यूल शामिल करना चाहते हैं में अपने 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, तो इसे पूरे परीक्षण के लिए केवल एक बार मॉड्यूल के बजाय एक बार निष्पादित किया जाएगा ।
सभी परीक्षण एकल के तहत दिखाई देते हैं 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लगता है कि इस तरह से थैगास्केल के उत्तर में ऑब्जेक्ट को प्रदूषित नहीं करना है क्योंकि यह ऑब्जेक्ट वास्तव में वैश्विक है और यहां तक कि तीसरे पक्ष के पुस्तकालयों में भी आपका कोड लोड हो रहा है। यह ऐसा कुछ नहीं है जो मुझे अपने कोड में स्वीकार्य लगे।
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 () {});