2014-04-04 15 views
10

के लिए कोणीय में ग्लोबली मॉक ऑब्जेक्ट में मेरा ऑब्जेक्ट है कि मैं इकाई परीक्षण के लिए मजाक कर रहा हूं। अनिवार्य रूप से अपने परीक्षण फ़ाइल में मैं इसे नकली इस प्रकार है:जैस्मीन/कर्म परीक्षण

var mockObject = { 
    mockMethod1 : function() {return true}, 
    mockMethod2 : function() {return true} 
}; 


beforeEach(module('myModule') , function ($provide) { 
    $provide.value('realObject',mockObject); 
}); 

तरह से मैं इसे समझते हैं कि के रूप में मैं अपने मॉड्यूल आदि में कार्यक्षमता ... कहीं भी संदर्भ देता है "realObject" परीक्षण का उपयोग करेगा मेरी "mockObject"

मेरी समस्या यह है कि मैंने परीक्षण के लिए कई जेएस फाइलें बनाई हैं और मैं उनमें से प्रत्येक में अपना "मॉकऑब्जेक्ट" परिभाषित नहीं करना चाहता हूं ... और न ही मैं इसे किसी भी स्थान पर बनाए रखना चाहता हूं ।

क्या मेरे "mockObjact" को एक अलग फ़ाइल में स्थानांतरित करने का कोई तरीका है जो karma.conf.js में शामिल हो जाता है जो मेरी किसी भी फाइल फाइल में इंजेक्शन के लिए "mockObject" उपलब्ध कराएगा ..... Im सोच रहा हूँ आप $ rootscope

उत्तर

3

पर इंजेक्ट करने के तरीके के साथ-साथ आप एक ऐसी सेवा भी बना सकते हैं जो आपके मॉक को घर ले, और प्रत्येक परीक्षण फ़ाइल में उस सेवा को इंजेक्ट करे।

beforeEach(inject(function($rootScope, $controller, yourMockSvc) { 
    appScope = $rootScope.$new(); 
    appCtrl = $controller('AppController', { 
     $scope: appScope, 
     yourSvc: yourMockSvc 
    }); 
})); 
+0

मैं सुनता हूं कि आप इसे एक सेवा बनाने के साथ कहां जा रहे हैं। लेकिन जिस तरह से मैं इसे कल्पना करता हूं वह ऐसा कुछ है जहां मैं अपने परीक्षण के शीर्ष पर कुछ स्थापित करने में सक्षम होना चाहता हूं: var myMockObject = myService.getObject(); और फिर उस मैक ऑब्जेक्ट का प्रयोग शेष परीक्षणों में करें – Deslyxia

4

अगर यह एक विशिष्ट सुइट के संदर्भ से बाहर लिखा है, लेकिन अभी भी चमेली, उदा द्वारा निष्पादित आप एक वैश्विक beforeEach समारोह बना सकते हैं कर्म द्वारा लोड करने के लिए एक कस्टम फ़ाइल बनाएं और वर्णन फ़ंक्शन में इसे संलग्न किए बिना अपना कार्य पहले से लिखें।

उदाहरण:

बेला
var myGlobal; 

beforeEach(function() { 
    // This will run before any it function. 
    // Resetting a global state so the change in this function is testable 
    myGlobal = 10 
}); 

describe('first suite', function(){ 
    it('is a test', function(){ 
     expect(myGlobal).toBe(10); 
     // Set the value to show that beforeEach is executed for each it function 
     myGlobal = 20; 
     expect(myGlobal).toBe(20); 
    }); 

    it('is another test', function(){ 
     expect(myGlobal).toBe(10); 
     myGlobal = 30; 
     expect(myGlobal).toBe(30); 
    }); 
}); 

describe('second suite', function(){ 
    it('is a test', function(){ 
     expect(myGlobal).toBe(10); 
    }); 
}); 

देखें here

+1

हाँ, मैंने वर्तमान में इसे एक परीक्षण फ़ाइल में वैश्विक के रूप में लिखा है ... समस्या यह है कि मैं इस मॉक ऑब्जेक्ट को कई परीक्षण फ़ाइलों में उपयोग करना चाहता हूं और कुछ को बनाए रखना चाहता हूं इस वस्तु की प्रतियां यथासंभव। – Deslyxia

+0

वैश्विक क्या है? नकली वस्तु? क्या आप कई फाइलों में सेवा मूल्य प्रदान कर रहे हैं? चूंकि इसका उत्तर यही है - सभी परीक्षणों के लिए एक फ़ाइल में मॉक किए गए मान को –

+0

मुझे लगता है कि मैं क्या अस्पष्ट हूं, यह बिल्कुल बनाया गया है कि नव निर्मित सेवा में फ़ंक्शन को प्राप्त करने के लिए $ प्रदान करने का तरीका कैसा है, जो mockObject को वापस कर देगा। मैं पहले क्या कर रहा था परीक्षण में नकली वस्तु बना रहा था और फिर प्रदान कर रहा था। – Deslyxia

1

बस एक और फ़ाइल के अंदर अपने नकली वस्तु को परिभाषित करने और इसे निर्यात। आप इसे किसी भी फाइल में इस्तेमाल करने में सक्षम होना चाहिए।

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