2016-08-16 8 views
5

मैं कोणीय 2 आरसी 5 के लिए अपने यूनिट परीक्षण अपडेट कर रहा हूं। changelog नोट्स निम्नलिखित तोड़ने परिवर्तन:कोणीय 2 आरसी 5 टेस्ट मॉड्यूल को सही तरीके से कॉन्फ़िगर कैसे करें

addProviders [is deprecated], use TestBed.configureTestingModule instead

लेकिन यह जब एक परीक्षण में एक सेवा शामिल करने का प्रयास केवल त्रुटि लेने के लिए लगता है। मेरे इकाई परीक्षण निम्न करने के लिए प्रयोग किया है:

beforeEach(() => addProviders([ 
    MyService, 
    MockBackend, 
    ... 
])); 

यह अब परीक्षण मॉड्यूल कॉन्फ़िगर करना चाहिए:

TestBed.configureTestingModule({ 
    providers: [ 
     StoryService, 
     MockBackend, 
     ... 
    ] 
}); 

लेकिन वह अब एक त्रुटि

Service: MyService encountered a declaration exception FAILED

Error: Cannot configure the test module when the test module has already been instantiated. Make sure you are not using inject before TestBed.configureTestingModule .

मुझे लगता है कि inject जाँच कर ली है फेंकता configureTestingModule से पहले नहीं कहा जाता है। यह किसी भी अन्य घटक/निर्देश परीक्षणों को प्रभावित नहीं करता है, वे ठीक ठीक लगते हैं। आरसी 5 के साथ एक सेवा परीक्षण इकाई के लिए मैं इस त्रुटि को कैसे हल कर सकता हूं? मुझे एहसास है कि मुझे आरसी 5 के लिए परीक्षण दस्तावेज अपडेट होने तक इंतजार करना पड़ सकता है लेकिन संभावित समाधानों में किसी भी अंतर्दृष्टि की सराहना की जाएगी।

उत्तर

4

स्टिक TestBed.configureTestingModule beforeEach के अंदर इतने की तरह:

beforeEach(() => { 
    TestBed.configureTestingModule({ 
     providers: [ 
      StoryService, 
      MockBackend, 
      ... 
] 
    }); 
}); 
+1

मुझे टाइपरर जैसे एक और त्रुटि मिलती है: अब नल की संपत्ति 'इंजेक्टर' नहीं पढ़ सकता है? कोई विचार? –

3

मैं ने वही समस्या था और परीक्षण वातावरण रीसेट करके ही इसे तय:

import {MyService} from './my.service'; 
import {inject, TestBed} from '@angular/core/testing/test_bed'; 
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } 
     from '@angular/platform-browser-dynamic/testing'; 

describe('MyService',() => { 
    beforeEach(() => { 
    // Must reset the test environment before initializing it. 
    TestBed.resetTestEnvironment(); 

    TestBed 
     .initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()) 
     .configureTestingModule({ 
     providers: [ 
      MyService 
     ] 
    }); 
    }); 

    it('should do something', inject([MyService], (s: MyService) => { 
    let r = s.getResult(); 
    expect(r.length).toBe(2); 
    })); 
}); 

मैं काफी noob हूँ जब यह कोणीय 2 के लिए आता है इसलिए मैं अधिक जानकार लोगों से सुधार का स्वागत करता हूं। ऐसा लगता है कि किसी को प्रत्येक परीक्षण में परीक्षण पर्यावरण को रीसेट और पुन: प्रारंभ नहीं करना चाहिए। दुर्भाग्यवश, यह एकमात्र तरीका था जिसे मैं इसे काम करने में सक्षम था।

4

जो मैंने पढ़ा है, उससे आपको केवल एक बार परीक्षण वातावरण में प्रवेश करने की आवश्यकता है। इसके बाद आप परीक्षण मॉड्यूल रीसेट और प्रत्येक परीक्षा से पहले परीक्षण मॉड्यूल कॉन्फ़िगर कर सकते हैं:

beforeEach(() => { 
     TestBed.configureTestingModule({ 
      declarations: [ GridComponent ] 
     }); 
    }); 

    afterEach(() => { 
     TestBed.resetTestingModule(); 
    }); 

अग्रिम विन्यास है:

var testing = require('@angular/core/testing'); 
var browser = require('@angular/platform-browser-dynamic/testing'); 

try { 
    testing.TestBed.initTestEnvironment(browser.BrowserDynamicTestingModule, browser.platformBrowserDynamicTesting()); 
} catch ($error) { 
    console.log("test env failure" + $error); 
} 

कोड को पढ़ने के बाद ऐसा लगता है configureTestingModule resetTestingModule आंतरिक रूप से कॉल करेंगे लेकिन मैं पठनीयता प्रयोजनों के लिए प्रत्येक के बाद इसे घोषित करना चाहता हूं।

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