2014-04-06 21 views
5

यहां एक सामान्य नोड मॉड्यूल है। कुछ कार्यों के साथ जो सभी निर्यात नहीं किए जाते हैं, लेकिन उन्हेंपरीक्षण मॉड्यूल के नोड विधियों को निर्यात नहीं किया गया

var foo1 = function() { console.log("Foo1"); } 
var foo2 = function() { console.log("Foo2"); } 
var foo3 = function() { console.log("Foo3"); } 

module.exports = { 
    foo1: foo1, 
    foo2: foo2 
} 

कोई भी जानता है कि foo3 का परीक्षण कैसे करें? आम तौर पर मैं नोड-सैंडबॉक्स वाले मॉड्यूल के साथ मॉड्यूल का परीक्षण करता हूं। लेकिन मॉड्यूल के लिए दिए गए चीजों को नकल करना केवल संभव है, लेकिन मैं विधियों के दायरे को नहीं बदल सकता। नोड सैंडबॉक्स-मॉड्यूल के साथ परीक्षण मॉड्यूल के लिए

नमूना:

var SandboxedModule = require('sandboxed-module'); 
var user = SandboxedModule.require('./user', { 
    requires: {'mysql': {fake: 'mysql module'}}, 
    globals: {myGlobal: 'variable'}, 
    locals: {myLocal: 'other variable'}, 
}); 

मदद के लिए धन्यवाद!

+0

बस भी foo3 निर्यात करते हैं, एक अंड के साथ लगाकर erscore दर्शाता है कि यह एक निजी समारोह है, उदाहरण के लिए '_foo3: foo3'। –

+0

संभावित डुप्लिकेट [नोड.जेएस मॉड्यूल में एक आंतरिक (गैर-निर्यात) फ़ंक्शन को कैसे एक्सेस और परीक्षण करें?] (Http://stackoverflow.com/questions/14874208/how-to-access-and-test-an -internal गैर-निर्यात-समारोह में एक नोड-js मॉड्यूल) – waterproof

उत्तर

6

आप भाषा के स्कोपिंग नियमों को नहीं बदल सकते हैं। लेकिन आप इसके आसपास हो सकते हैं। आप एक पर्यावरण चर निर्यात कर सकते हैं, और यदि चर मौजूद है, तो आप foo3 भी निर्यात कर सकते हैं। इस

module.exports = { 
    foo1: foo1, 
    foo2: foo2 
} 

if (process.env.TESTING) { 
    module.exports.foo3 = foo3; 
} 

तो की तरह, testcases foo3 परीक्षण कर सकते हैं, जैसे वे अन्य निर्यात कार्यों का परीक्षण करें। लेकिन, उत्पादन वातावरण में, TESTING पर्यावरण परिवर्तक वहां नहीं होंगे, foo3 निर्यात नहीं किया जाएगा। , के रूप में समारोह/चर आंतरिक उपयोग के लिए, कोई बाहरी कोड है कि समारोह/चर पर निर्भर होना चाहिए और यह किसी भी सूचना के बिना परिवर्तन के अधीन है है

इसके अलावा, समारोह के नाम पर _ का उपयोग कर समझा जाता है।

0

मैंने इसका इस्तेमाल किया, ऐसा लगता है कि यह काम करता है।

sample.js

function double(p2) { 
    return p2*2 
} 

module.exports = function(p, p2) { 
return "Hi "+p+", double "+p2+" = "+double(p2) 
} 

sample_test.js

function load(file_name) { 
    global.module = {} 
    const contents = require('fs').readFileSync(file_name, 'utf8'); 
    const vm = require('vm') 
    new vm.Script(contents).runInThisContext(); 
} 


load("./sample.js") 

console.log(global.module.exports("Jim","10")) 
console.log(double(2)) 

उत्पादन

Hi Jim, double 10 = 20 
4 
संबंधित मुद्दे