2017-05-22 25 views
12

मैं की कोड स्प्लिटिंग सुविधा (require.ensure) का उपयोग अपने React के शुरुआती बंडल आकार को कम करने के लिए उपयोग करता हूं जो घटकों को लोड करके एक अलग बंडल से पृष्ठ लोड पर दिखाई नहीं दे रहा है जो अतुल्यकालिक रूप से लोड होता है।मैं वेबपैक की ज़रूरतों को कैसे रोकूं?

यह पूरी तरह से काम करता है, लेकिन मुझे इसके लिए एक यूनिट परीक्षण लिखने में परेशानी है।

मेरा परीक्षण सेटअप Mocha, Chai और Sinon पर आधारित है।

describe('When I render the component',() => { 
    let component, 
     mySandbox; 
    beforeEach(() => { 
     mySandbox = sandbox.create(); 
     mySandbox.stub(require, 'ensure'); 
     component = mount(<PageHeader />); 
    }); 
    describe('the rendered component',() => 
     it('contains the SideNav component',() => 
      component.find(SideNav).should.have.length(1) 
     ) 
    ); 
    afterEach(() => mySandbox.restore()); 
}); 

जब परीक्षण चल रहा है, मैं इस त्रुटि संदेश मिलता है:

यहाँ कोड मैं अब तक की कोशिश की है से प्रासंगिक अंश है के लिए हुक "प्रत्येक से पहले"

"शामिल हैं SideNav घटक ": न के बराबर अपनी संपत्ति ठूंठ नहीं किया जा सकता सुनिश्चित

यह इसलिए होता है क्योंकि require.ensure एक विधि है कि केवल एक हम में मौजूद है बीपीएसी बंडल, लेकिन मैं वेबपैक के साथ अपने परीक्षणों को बंडल नहीं कर रहा हूं, न ही मैं चाहता हूं, क्योंकि यह अधिक ओवरहेड और संभावित रूप से परीक्षण निष्पादन समय का परीक्षण करेगा।

तो मेरे सवाल है:

वहाँ webpack के माध्यम से परीक्षण चलाने के बिना webpack सिनोन साथ के require.ensure ठूंठ के लिए एक रास्ता है?

+0

आप सही हैं। प्रत्येक मॉड्यूल को एक अद्वितीय 'आवश्यकता' फ़ंक्शन मिलता है। मैंने सोचा जितना जटिल है। आप इसके बारे में [यहां] पढ़ सकते हैं (http://fredkschott.com/post/2014/06/require-and-the- मॉड्यूल- सिस्टम /)। बंदर पैच 'require.esnure' के लिए यह बहुत मुश्किल होगा। मैं आपको सुझाव देता हूं कि आपको बेबेल-प्लगइन-रिवायर जैसे कुछ पर विचार करें जो @ हिनोक –

+0

द्वारा सुझाया गया है आपकी समस्या का उत्तर यहां दिया गया है: https://stackoverflow.com/questions/33070482/writing-tests-for-javascript- मॉड्यूल-using- वेबपैक्स-आवश्यकता-सुनिश्चित-कार्य –

+0

बात यह है कि, मैंने अपनी परियोजना शुरू करने पर रिवायर का उपयोग करके मूल्यांकन किया और पाया कि मॉकरी बहुत बेहतर है, इसलिए मुझे लगता है कि मुझे यह पता लगाना होगा कि उस पोस्ट से रिवायर समाधान का उपयोग कैसे करें मजाक। –

उत्तर

3

प्रत्येक मॉड्यूल तो उपहास करने के लिए require.ensure आसपास की परीक्षा में आवश्यक मॉड्यूल से इस अनूठी require पाने के लिए require अमूर्त के कुछ प्रकार है करने के लिए और फिर उस require को ensure() की एक नकली जोड़ने है एक ही तरीका है की आवश्यकता होती है के अपने स्वयं के उदाहरण है उदाहरण।

आप babel-plugin-rewire का उपयोग करें और गेटर का उपयोग require प्राप्त करने के लिए, की तरह

const require = myComponent.__get__('require'); 
require.ensure =() => { /* mock here */}; 

सकता है मैं नहीं कर रहा हूँ 100% यकीन है कि यह काम करेगा, लेकिन निश्चित रूप से मैं इस दिशा में जाने की कोशिश करेगी। मैं आपकी समस्या से संबंधित github पर this issue पढ़ने की सलाह देता हूं और बहुत कुछ बताता हूं।

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