2012-02-24 12 views
20

मेरे पास एक साधारण जावास्क्रिप्ट फ़ाइल है, color.js, और एक मिलान करने वाली स्पेक फ़ाइल, colorSpec.jsजैस्मीन नोड के साथ परीक्षण के लिए फ़ाइल कैसे लोड करें?

color.js:

function Color() 
{ 

} 

colorSpec.js:

require('./color.js'); 

describe("color", function() { 
    it("should work", function() { 
    new Color(255, 255, 255); 
    }); 
}); 

जब मैं jasmine-node colorSpec.js चलाने के लिए, मैं निम्नलिखित अपवाद:

ReferenceError: Color is not defined 

कैसे कर सकते हैं मुझे जैस्मीन मिलता है colorSpec.js चलाने से पहले मेरी color.js फ़ाइल लोड करने के लिए?

+0

मुझे अभी यह मिला प्रश्न, जो समान है: http://stackoverflow.com/questions/4662851/how-do-you-import-non-node-js-files – LandonSchropp

उत्तर

13

आप colorSpec.js में अपनी color.js को एक आवश्यकता() के साथ लोड कर सकते हैं। मैं नहीं देखता कि कैसे जैस्मीन सभी निर्भरताओं का आकलन कर सकता है बिना आप जेस्मीन को बताते हैं कि वे आपकी spec फ़ाइल में वास्तव में क्या हैं। संपादित करें: एक त्वरित और गंदे समाधान, लेकिन शायद वहाँ कुछ builtin है जैस्मीन ऐसा करने के लिए:

fs = require('fs') 
myCode = fs.readFileSync('./color.js','utf-8') // depends on the file encoding 
eval(myCode) 

फिर अपने वर्ग चमेली के साथ उपलब्ध होना चाहिए

यदि आप अपनी फ़ाइल मुझे लगता है कि पर सीधे आवश्यकता कॉल आपको मॉड्यूल बनाने और इसे

+0

मैंने 'आवश्यकता (' ./ color.js ') जोड़ने की कोशिश की; ' मेरी spec फ़ाइल के शीर्ष पर लेकिन मुझे अभी भी 'रेफर्रेस एरर' अपवाद मिल रहा है। – LandonSchropp

+0

मैंने अपने प्रश्न को और विवरण के साथ अपडेट किया। – LandonSchropp

+0

मैंने अपना जवाब भी अपडेट किया। – mpm

5

निर्यात करने की आवश्यकता नहीं है, यह काम की आवश्यकता नहीं है। आपके color.js को कुछ परिभाषित/निर्यात करने की आवश्यकता है। मैं मानता हूं कि आप स्वच्छता के लिए यहां requ.js का उपयोग करें।

color.js

define('Color', function (require) { 
    var Color = function() {}; 
    return Color; 
}); 
अपने कल्पना में

तब:

var Color = require('color.js'); 
+1

मैं ईमानदारी से 'require.js' का उपयोग करने की योजना नहीं बना रहा था। मैं रंगीन पुस्तकालय का निर्माण कर रहा हूं और मैं इसका उपयोग कर लोगों पर किसी भी निर्भरता को मजबूर नहीं करना चाहता था आपका उत्तर शायद ऐसा करने का स्वीकार्य तरीका है, लेकिन यह मेरी परियोजना आवश्यकताओं के अनुरूप नहीं है। – LandonSchropp

+0

हालांकि मदद के लिए धन्यवाद। मैं इसकी सराहना करता हूं। – LandonSchropp

14

जब जैस्मीन नोड का उपयोग कर, आप अपने वस्तु/समारोह/वर्ग एक नोड के रूप में, इस मामले रंग में, निर्यात करने के लिए चाहता हूँ मॉड्यूल। मैं कोशिश करते हैं और मेरी मॉड्यूल, दोनों नोड या ब्राउज़र में काम इतना तरह करना पसंद:

फ़ोल्डर संरचना:

js 
    - src/ 
     color.js 
    - spec/ 
     colorSpec.js 

src/color.js

/** 
* class Color 
* 
* @constructor 
*/ 
function Color(red, green, blue) 
{ 
    var current = [red, green, blue]; 

    this.getCurrent = function() 
    { 
     return current; 
    } 
} 

// Export node module. 
if (typeof module !== 'undefined' && module.hasOwnProperty('exports')) 
{ 
    module.exports = Color; 
} 

कल्पना/colorSpec.js

var Color = require('../src/color.js'); 

describe("Test the Color object", function() { 
    var color = new Color(255, 255, 255); 

    it('to verify that it can return a color.', function() { 
     expect(color.getCurrent()).toContain(255); 
    }); 
}); 
+0

धन्यवाद। एक प्रश्न: क्या मैं 'मॉड्यूल' अस्तित्व जांच तर्क को छोड़ सकता हूं? 'मॉड्यूल' को 'अपरिभाषित' कब किया जा सकता है? –

+1

यदि आप कभी भी ब्राउज़र में इसे चलाने की योजना नहीं बनाते हैं, तो हाँ। – b01

संबंधित मुद्दे

 संबंधित मुद्दे