2017-03-28 6 views
12

मैं कोणीय 2 परीक्षण में नया हूं। मैं यह पता लगाने की कोशिश कर रहा हूं कि testsbed.get() का उपयोग करने और परीक्षण स्तर पर केवल inject का उपयोग करने में क्या अंतर है।testbed.get के बीच क्या अंतर है और कोणीय 2/जैस्मीन परीक्षण में इंजेक्ट करें?

जैसे:

beforeEach(() => { 
    TestBed.configureTestingModule({ 
     providers: [SomeService] 
    }); 

    const testbed = getTestBed(); 
    someService= testbed.get(SomeService); 
    }); 
}); 

बनाम

it('test service', inject([SomeService], (someService: SomeService) => { 
+0

मैंने आपके लिए टैग और शीर्षक के लिए जैस्मीन जोड़ा। चूंकि यह महत्वपूर्ण तकनीक है, यह सवाल संबंधित है। – JGFMK

+0

मेरे पास पूरा जवाब नहीं है, लेकिन कोड खोद रहा है: 'इंजेक्ट' कॉल 'testbed.get' आंतरिक रूप से। मुख्य अंतर यह है कि यदि आप 'इंजेक्ट' करने के लिए 'AsyncTestCompleter'' प्रदान करते हैं तो यह 'compileComponents' चलाएगा और प्रदान की गई वस्तु में 'किया गया' फ़ंक्शन है जो एसिंक परीक्षण के निष्पादन को पूरा करता है। ऐसा लगता है कि यह पुराना कोड है और इसे 'async (इंजेक्ट (' इसके बजाय। 'इस बिंदु से सिंटैक्स वरीयता पदार्थ की तरह दिखता है। – BrunoLM

+0

v4 https://github.com/angular/angular/blob/4.3.x /packages/core/testing/src/test_bed.ts#L493 /v2 https://github.com/angular/angular/blob/2.0.x/modules/%40angular/core/testing/test_bed.ts#L404 – BrunoLM

उत्तर

10

inject सहायक समारोह ऐतिहासिक दृष्टि से प्रत्यक्ष इंजेक्टर कॉल करने के लिए एक विकल्प के रूप AngularJS के बाद से इस्तेमाल किया गया था। कोणीय 1 में, ngMock के साथ एक परीक्षण बूटस्ट्रैप करना आवश्यक था। यह कोणीय 2 और उच्चतर में पूरी तरह से वैकल्पिक है और टेस्टबैड परीक्षणों में डीआई के लिए सिर्फ एक सुझाया गया तरीका है।

It a convenience wrapper for testBed.get कि, कई testBed.get कॉल से बचने के लिए अनुमति देता है इसी तरह करने के लिए:

const [foo, bar] = [Foo, Bar].map(TestBed.get); 

अन्य सहायक कार्यों वैकल्पिक inject, अर्थात् async और fakeAsync साथ संयोजन के रूप में इस्तेमाल किया जा सकता है।

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