2015-04-01 15 views
32

मैं एक जावास्क्रिप्ट लाइब्रेरी लिख रहा हूं जो नए ईएस 6 वादों का उपयोग करता है। मैं फ़ायरफ़ॉक्स में लाइब्रेरी का परीक्षण कर सकता हूं क्योंकि वादे परिभाषित किए जाते हैं। हालांकि, जब मैं कर्म और फैंटॉमजेएस के साथ अपने कोड का परीक्षण करने की कोशिश करता हूं, तो मुझे त्रुटि Can't find variable: Promise. मिलती है। मुझे लगता है कि यह इसलिए है क्योंकि फ़ैंटॉमजेएस ब्राउज़र अभी तक es6 वादों का समर्थन नहीं करता है।कर्म, फैंटॉमजेएस और ईएस 6 वादे

मैं वर्मा के लिए पॉलीफिल लाने के लिए कर्म को कैसे कॉन्फ़िगर कर सकता हूं?

उत्तर

0

यह thread आपकी मदद करनी चाहिए। इसके अनुसार, ऐसा लगता है कि आपको ES6 के साथ PhantomJS2 का उपयोग करने का प्रयास करना चाहिए। आप this प्रोजेक्ट को भी देख सकते हैं, जो आपके आस-पास के विषय के साथ व्यवहार करता है।

मुझे आशा है कि यह आप बस Babel Polyfill स्थापित करके

+3

त्वरित परीक्षण से पता चलता है कि फैंटॉमजेएस 2.0.1-देव वादा का समर्थन नहीं करता है। –

63

आप कोलाहल polyfill में खींच सकते हैं मदद मिल सकती है:

npm install --save-dev babel-polyfill 

और उसके बाद की files अनुभाग के भीतर अपने स्रोत और परीक्षण फ़ाइलों से पहले polyfill फ़ाइल शामिल अपने karma.conf.js:

files: [ 
    'node_modules/babel-polyfill/dist/polyfill.js', 
    'index.js', //could be /src/**/*.js 
    'index.spec.js' //could be /test/**/*.spec.js 
], 

जब तक आप जानते हैं कि अपने सभी लक्ष्य ब्राउज़रों का समर्थन promi एसईएस, आप शायद इस रिलीज बिल्ड में भी इस पॉलीफिल को लागू करना चाहते हैं।

यदि आप वास्तव में साहसी महसूस कर रहे हैं तो आप अपने परीक्षण को अधिक मॉड्यूलर बनाने के लिए फ़ाइलों को खींचने के लिए ब्राउज़रइफ़ का उपयोग कर सकते हैं, और फिर ES6 को ES6 को पार करने के लिए Babelify का उपयोग कर सकते हैं। मैंने sample project with these and a working test involving a Promise (running on PhantomJS2) for reference बनाया है।

+0

मुझे एक समान समस्या है लेकिन पॉलीफिल को शामिल करने के बाद, वादा कभी हल नहीं होता है, यहां एक गलती है: https://gist.github.com/Kikketer/1646eccdaff76944b358 किसी के पास कोई सुराग है कि वादा कभी इसे क्यों नहीं चलाएगा ' ।फिर' ? – Chris

+0

@Chris आपकी समस्या सभी संबंधित नहीं दिखती है। मैं आपकी जिंदगी नहीं चला सका, लेकिन ऐसा लगता है कि आप समस्या हैं शायद कोणीय से संबंधित है। कोणीय के साथ वादा पॉलीफिल का उपयोग न करें - आपको अंतर्निहित $ q कार्यान्वयन का उपयोग करने की आवश्यकता है (अन्यथा यह पाचन चक्र के साथ काम नहीं करेगा)। यदि आप एक हल किए गए वादे का निर्माण '$ q.when (some_object) 'बनाना चाहते हैं। आपको वास्तव में SO पर एक नया प्रश्न खोलने की ज़रूरत है, लेकिन यहां लिंक पोस्ट करें और मैं एक नज़र डालेगा। – spikeheap

+0

@spikeheap हाँ मैंने पूरे ऐप में $ q पर स्विच किया और यह काम किया। इसे देखने के लिए धन्यवाद। – Chris

0

आप ES6 सुविधाओं का उपयोग करने वाली फ़ाइलों के लिए karma-babel-preprocessor का उपयोग कर सकते हैं।

npm install --save-dev karma-babel-preprocessor

के साथ स्थापित करें और फिर जोड़ने निर्दिष्ट क्या फ़ाइलों को आप karma.conf preprocessed किया जाना चाहिए:

preprocessors: { 
     "src/**/*.js": ["babel"], 
     "test/**/*.js": ["babel"] 
    }, 
+0

दुर्भाग्यवश यह काम नहीं करता है। मैं पहले से ही 'बेबेल-प्रीप्रोसेसर' का उपयोग कर रहा था और कर्म को 'Promise.resolve()' फ़ंक्शन नहीं मिला। 'बेबेल-पॉलीफिल' ने मेरे लिए मुद्दा तय किया। – Jelle

10

कोलाहल 6 के लिए, हम वादा समर्थन करने के लिए babel-polyfill स्थापित की जरूरत है।

 
npm install --save-dev babel-polyfill 

और files अनुभाग

files: [ 
    'node_modules/babel-polyfill/dist/polyfill.js', 
    .... 
] 

यह अच्छी तरह से प्रलेखित है भीतर karma.conf.js में एक पंक्ति जोड़ें https://github.com/babel/karma-babel-preprocessor#polyfill

0

में के रूप में सही ढंग से लेखक यह ES6 वादा पहचान करने में सक्षम नहीं है द्वारा कहा। इसे लोड करने के लिए, es6- वादा मॉड्यूल को वेबपैक की मदद से लोड किया जा सकता है। प्रोवाइड प्लगइन और इसे वेबपैक के प्लगइन सरणी के अंदर कॉन्फ़िगर करना।

plugins: [ 
     new webpack.ProvidePlugin({ 
      'Promise': 'es6-promise' 
     }) 
    ] 

यह मेरे लिए काम करता प्रतीत होता है!

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