आप एक से अधिक मॉड्यूल शामिल करना चाहते हैं में अपने 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 () {});