2016-03-01 10 views
8

मुझे आश्चर्य है कि मैं जैस्मीन पर फ़ंक्शन/स्टब फ़ंक्शन कैसे कर सकता हूं यदि मैं ईएस 6 आयात/बेबेल के साथ निर्यात का उपयोग कर रहा हूं? SyntaxError: /Users/oleg/projects/rp/popup/lib/spec/popup.spec.js: "MobileDetect" is read-onlyजैस्मीन: ES6 पर आयातित फ़ंक्शन/कन्स्ट्रक्टर को कैसे जासूसी करें?

it('should spy MobileDetect',() => { 
    console.log(MobileDetect.prototype.constructor === MobileDetect); //true 
    spyOn(MobileDetect.prototype, 'constructor'); 
    console.log(MobileDetect.prototype.constructor === MobileDetect); //false 
});` 

मैं इस दृष्टिकोण की कोशिश की है, लेकिन यह भी काम नहीं करता:

import MobileDetect from 'mobile-detect'; 
it('should spy MobileDetect',() => { 
    MobileDetect = jasmine.createSpy('MobileDetect'); 
});` 

पहली समस्या यह है कि मैं केवल पढ़ने के लिए मॉड्यूल को फिर से लिखने नहीं कर सकते

मॉड्यूल निर्माण में विफल रहा है। .. MobileDetect.prototype.constructor जासूसी, लेकिन सीधे मोबाइल डिटेक्ट नहीं।

इस समस्या के बारे में आप क्या सोचते हैं?

+0

आप 'मोबाइलडेटेक्ट' पर जासूसी नहीं कर सकते क्योंकि चर के मूल्य को नए जासूसी समारोह में फिर से लिखा नहीं जा सकता है। मेरा अनुमान है: क्या होगा यदि आपने 'var myMobileDetect = MobileDetect' किया था और फिर इसके बजाय' myMobileDetect' पर जासूसी की थी? जाहिर है, आपको 'myMobileDetect' का उपयोग करने के लिए अपना कोड बदलना होगा, हालांकि। – apsillers

+1

मैं सोच रहा हूं कि आप अपने परीक्षण में क्या करने की कोशिश कर रहे हैं। क्या आप एक जासूस बनाना चाहते हैं जो 'मोबाइलडेटेक्ट' विधियों की नकल करता है? (यानी एक नकली) –

उत्तर

1

proxyquire के समान require() आपके परीक्षणों में बयान देने के लिए, आप babel-plugin-rewire का उपयोग ईएस 6 आयात के साथ करने के लिए कर सकते हैं।

आपका परीक्षण सेटअप ऐसा कुछ दिख सकता है;

import myModuleUnderTest from '../src/popup'; 

beforeEach(() => { 
    this.fakeMobileDetect = jasmine.createSpy(); 
    myModuleUnderTest.__Rewire__('MobileDetect', this.fakeMobileDetect); 
}); 

जो आप सामान्य पर वापस जा सकते हैं;

afterEach(() => { 
    myModuleUnderTest.__ResetDependency__('MobileDetect'); 
}); 
संबंधित मुद्दे