2016-09-20 15 views
9

के बीच संघर्ष मैं जैस्मीन परीक्षण सूट के साथ काम कर रहा हूं जिसमें कुछ एंगुलर 2 घटकों के लिए जैस्मीन परीक्षणों के साथ "वेनिला" जैस्मीन परीक्षण दोनों शामिल हैं। कोणीय 2 के समावेशन के कारण, zone.js लोड हो जाता है। यह जैस्मीन की घड़ी के साथ एक संघर्ष बनाता है। उदाहरण के लिए, निम्न परीक्षण त्रुटि के साथ विफल, Error: Jasmine Clock was unable to install over custom global timer functions. Is the clock already installed?जोन.जेएस और जैस्मीन की घड़ी

describe('an async test with zone.js present', function() { 
    beforeEach(function() { 
    jasmine.clock().install(); 
    }); 

    afterEach(function() { 
    jasmine.clock().uninstall(); 
    }); 

    it('cannot install jasmine\'s mock clock', function() { 
    var callback = jasmine.createSpy('setTimeoutCallback') 
    setTimeout(callback, 55); 
    jasmine.clock().tick(56); 
    expect(callback).toHaveBeenCalled(); 
    }); 
}) 

Here ऊपर कोड के लिए plunker है।

"वेनिला" परीक्षणों से अलग कोणीय 2 परीक्षणों को वितरित करने का छोटा, मैं सोच रहा हूं कि कौन से विकल्प उपलब्ध हो सकते हैं। उदाहरण के लिए, ज़ोन के साथ जैस्मीन घड़ी की नौकरी करना संभव है? उदाहरण के लिए, ज़ोन के साथ टिक अनुकरण करना या सम्मिलन से पहले सभी निर्धारित कार्यों को फ़्लश करना संभव है?

उत्तर

4

मेरे लिए यह काम करता है यदि आप beforeEach में घड़ी को अनइंस्टॉल करते हैं। यह चमेली द्वारा अनुशंसित नहीं है और थोड़ा अजीब है क्योंकि अनइंस्टॉल करने के लिए यह afterEach का उपयोग करने के लिए और अधिक समझ में आता है। लेकिन uninstallको से पहले कॉल करना पहले install कॉल मेरे लिए तय किया गया है।

+0

यह मेरे लिए इस मुद्दे को ठीक करने लगता है लेकिन मुझे यकीन नहीं है कि इसका क्या कारण हो सकता है क्योंकि अब जोनजेएस कार्यों को अब नहीं कहा जाता है। –

+0

क्या आप 'अनइंस्टॉल करें' करते हैं और फिर 'इंस्टॉल करें' या केवल अनइंस्टॉल करते हैं? – Tim

+0

दोनों, पहले अनइंस्टॉल करें और फिर इंस्टॉल करें। AFAIK अनइंस्टॉल वर्तमान में रीयल-घड़ी पर सेट किए गए घड़ी के फ़ंक्शन को रीसेट कर देगा, फिर इंस्टॉल हमेशा काम करेगा क्योंकि चेक जो पहले स्थान पर अपवाद का कारण बनता है अब अनइंस्टॉल करने के कारण हमेशा पास हो जाएगा। यह अब मेरे लिए काम करता है लेकिन इससे समस्याएं पैदा हो सकती हैं यदि मैं एक परीक्षण चलाऊंगा जिसके लिए जोनजेएस की आवश्यकता है। –

4

Angular documentation आप एक fakeAsync शरीर जो @angular/core/testing मॉड्यूल का हिस्सा है में tick समारोह का उपयोग करना चाहिए पर कहा गया है।

यह कुछ इस तरह दिखेगा अपने उदाहरण और टाइपप्रति का उपयोग करना ...

import { fakeAsync, tick } from '@angular/core/testing'; 

... 

it('cannot install jasmine\'s mock clock', fakeAsync(() => { 
    var callback = jasmine.createSpy('setTimeoutCallback') 
    setTimeout(callback, 55); 
    tick(56); 
    expect(callback).toHaveBeenCalled(); 
})); 
+3

मैं इसे एसिंक परीक्षणों के लिए करता हूं, लेकिन कुछ परीक्षणों में मैं सिर्फ 'तारीख' के लिए 'jasmine.clock()। MockDate() 'का उपयोग करना चाहता हूं। 'FakeAsync() ' – Necros

+1

के साथ ऐसा नहीं कर सकता मैं एक ही मुद्दे पर चल रहा हूं। क्या आप Angular2 में सही ढंग से नकली तिथियों का एक तरीका ढूंढने में सक्षम थे? रिकॉर्ड के लिए – Goutham

3

कोड जो इस here फेंकता है।

इसका तात्पर्य है कि जेस्मीन को जोन.जे से पहले लोड किया गया था। लोडिंग ऑर्डर स्विच करें। जोन को हमेशा पहले लोड किया जाना चाहिए।

+3

। इसे कर्म 1.3 और जैस्मीन 2.5 के साथ काम करने के लिए, हमें कॉन्फ़िगरेशन में 'customContextFile' को ओवरराइड करना होगा। हमने 'zone.js', 'long-stack-trace-zone.js', और' proxy.js' को z.ms पैकेज से पहले jasmine lib सहित शामिल किया था। इसके अलावा, 'jasmine.clock() के साथ एक वैश्विक' आफ्टर 'ब्लॉक' अनइंस्टॉल() 'उपयोग के लिए समस्याओं को हल करना प्रतीत होता है। – RJo

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