2016-01-07 13 views
7

में कन्स्ट्रक्टर में इंजेक्शन वाले राउटर के साथ समस्या इकाई परीक्षण सेवा मैं एक ऐसे सेवा की जांच करने की कोशिश कर रहा हूं जिसमें उसके निर्माता में राउटर इंजेक्शन दिया गया हो। एंगुलर कनेक्ट कनेक्ट 2015 में प्रस्तुत जूली राल्फ के सुझावों के बाद (और उसकी भंडार: https://github.com/juliemr/ng2-test-seed), मैं कर्म और जैस्मीन का उपयोग कर रहा हूं।अंगुलर 2

यह उदाहरण सेवा इस प्रकार परीक्षण किया जाना:

import { Router } from 'angular2/router'; 

export class ExampleService { 
    constructor(router : Router) { 
    this._router = router; 
    } 

    //... 
} 

अभी, मैं सिर्फ सच जोर देते हुए कर रहा हूँ। रूटर को देखते हुए संपत्ति अशक्त

की 'लंबाई' पढ़ा नहीं जा सकता:

import { it, describe, expect, inject, beforeEachProviders, MockApplicationRef } from 'angular2/testing'; 
import { ROUTER_PROVIDERS } from 'angular2/router'; 
import { provide, ApplicationRef } from 'angular2/core'; 

import { ExampleService } from 'example-service.js'; 

describe('ExampleService',() => { 
    beforeEachProviders(() => [ 
    ROUTER_PROVIDERS, ExampleService, 
    provide(ApplicationRef, { useClass: MockApplicationRef }) 
    ]); 

    it('should validate the truth', inject([ExampleService], (exService) => { 
    expect(true).toBeTruthy(); 
    })); 
}); 

जब मैं परीक्षण चलाने (> कर्म karma.config.js शुरू), मैं एक लेखन त्रुटि प्राप्त: यह सेवा परीक्षण इस प्रकार है .js स्रोत कोड, ऐसा लगता है कि मुझे राउटर इंजेक्शन से पहले कम से कम एक घटक बूटस्ट्रैप करना चाहिए। क्या परीक्षण में राउटर निर्भरता को इंजेक्ट करने का एक आसान तरीका है?

स्टैकट्रेस: ​​

ORIGINAL EXCEPTION: TypeError: Cannot read property 'length' of null ORIGINAL STACKTRACE: TypeError: Cannot read property 'length' of null at routerPrimaryComponentFactory (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/router.js:2963:27) at Injector._instantiate (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11920:19) at Injector._instantiateProvider (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11859:21) at Injector._new (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11849:19) at InjectorDynamicStrategy.getObjByKeyId (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11733:42) at Injector._getByKeyDefault (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:12048:33) at Injector._getByKey (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:12002:21) at Injector._getByDependency (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11990:21) at Injector._instantiate (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11887:32) at Injector._instantiateProvider (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11859:21) at Injector._new (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11849:19) at InjectorDynamicStrategy.getObjByKeyId (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11733:42) at Injector._getByKeyDefault (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:12048:33) at Injector._getByKey (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:12002:21) at Injector._getByDependency (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11990:21) at Injector._instantiate (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11887:32) at Injector._instantiateProvider (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11859:21) at Injector._new (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11849:19) at InjectorDynamicStrategy.getObjByKeyId (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11733:42) at Injector._getByKeyDefault (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:12048:33) at Injector._getByKey (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:12002:21) at Injector._getByDependency (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11990:21) at Injector._instantiate (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11887:32) at Injector._instantiateProvider (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11859:21) at Injector._new (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11849:19) at InjectorDynamicStrategy.getObjByKeyId (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11733:42) at Injector._getByKeyDefault (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:12048:33) at Injector._getByKey (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:12002:21) at Injector.get (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2.js:11804:19) at C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/testing.dev.js:2477:25 at Array.map (native) at Array.map (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/es6-shim/es6-shim.js:1113:14) at FunctionWithParamTokens.execute (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/testing.dev.js:2476:33) at C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/testing.dev.js:2601:25 at Zone.run (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/angular2-polyfills.js:138:17) at Zone.run (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/testing.dev.js:2544:30) at runInTestZone (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/testing.dev.js:2588:23) at Object. (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/angular2/bundles/testing.dev.js:2600:33) at attemptAsync (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1819:24) at QueueRunner.run (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1774:9) at QueueRunner.execute (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1762:10) at Spec.Env.queueRunnerFactory (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:627:35) at Spec.execute (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:353:10) at Object.fn (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:2360:37) at attemptAsync (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1819:24) at QueueRunner.run (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1774:9) at QueueRunner.execute (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1762:10) at Env.queueRunnerFactory (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:627:35) at Object.fn (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:2345:13) at attemptAsync (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1819:24) at QueueRunner.run (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1774:9) at C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1801:16 at C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1745:9 at queueRunnerFactory.onComplete (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:2348:17) at QueueRunner.clearStack (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:605:9) at QueueRunner.run (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1784:12) at C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1801:16 at C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:1745:9 at complete (C:/Users/LSANTOS/Desktop/ng2-test-seed/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:365:9)

सिर्फ ROUTER_PRIMARY_COMPONENT उपलब्ध कराने की आवश्यकता भी देखें https://github.com/angular/angular/issues/6325

उत्तर

6

समस्या हल,।

import {ROUTER_PRIMARY_COMPONENT} from 'angular2/router'; 

class MockPrimaryComponent { 
} 

beforeEachProviders(() => [ 
    ROUTER_PROVIDERS, 
    provide(ROUTER_PRIMARY_COMPONENT, {useClass: MockPrimaryComponent}), 
    ExampleService, 
    provide(ApplicationRef, { useClass: MockApplicationRef }) 
]); 
+1

क्या आपने राउटर.नाविगेट() का उपयोग करके परीक्षण के लिए राउटर को स्थापित करने का भी प्रबंधन किया था? –

+0

यह नवीनतम आरसी 1 के साथ कैसे काम करता है? – hmrc87

3

मुझे पता है कि यह पोस्ट पुराने राउटर से संबंधित है, लेकिन मैंने सोचा कि यह जवाब देने के लिए उपयोगी हो सकता है। नई रूटर के साथ कोणीय संस्करण rc.1 का उपयोग करना, मैं परीक्षण navigateByUrl सहित रूटर के साथ इकाई परीक्षण, मिल गया, प्रेरणा के रूप में कोणीय भीतर इस परीक्षण का उपयोग करके: https://github.com/angular/angular/blob/master/modules/%40angular/router/test/integration_spec.ts

मुझे hastle

का एक बहुत बचाया यहाँ एक काम कर रहा है उदाहरण

import {setBaseTestProviders,beforeEachProviders,inject,it,describe,expect,beforeEach} from '@angular/core/testing' 

import { Component,provide} from '@angular/core'; 
import {Routes,ROUTER_DIRECTIVES,Route} from "@angular/router"; 

import {ComponentResolver} from '@angular/core'; 
import {Router,RouterOutletMap,RouteSegment,RouterUrlSerializer,DefaultRouterUrlSerializer} from '@angular/router'; 
import {SpyLocation} from '@angular/common/testing'; 
import {Location} from '@angular/common'; 
import {ComponentFixture, TestComponentBuilder} from '@angular/compiler/testing'; 

import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from '@angular/platform-browser-dynamic/testing'; 



@Component({ 
    selector: 'some-component', 
    template: `Blah!`, 
    directives: [ROUTER_DIRECTIVES] 
}) 
export class SomeComponent { 
} 

@Component({ 
    selector: 'another-component', 
    template: `Blah!`, 
    directives: [ROUTER_DIRECTIVES] 
}) 
export class AnotherComponent { 
} 

@Component({ 
    selector: 'root-cmp', 
    template: `<router-outlet></router-outlet>`, 
    directives: [ROUTER_DIRECTIVES] 
}) 
@Routes([ 
    new Route({path: '/some-path',component:SomeComponent}), 
    new Route({path: '/another-path',component:AnotherComponent}) 
    ]) 
export class RootCmp { 
} 

export const PROVIDERS_TESTING = [ 
    provide(RouterUrlSerializer, {useClass: DefaultRouterUrlSerializer}), 
    RouterOutletMap, 
    provide(Location, {useClass: SpyLocation}), 
    provide(RouteSegment, {useFactory: (r) => r.routeTree.root, deps: [Router]}), 
    provide(Router,{ 
     useFactory: (resolver, urlParser, outletMap, location) => new Router(
      "RootComponent", RootCmp, resolver, urlParser, outletMap, location), 
      deps: [ComponentResolver, RouterUrlSerializer, RouterOutletMap, Location] 
     } 
    ),  
] 

setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,[TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS,PROVIDERS_TESTING]); 

it('some test',inject([Router, TestComponentBuilder, Location], (router:Router, tcb:TestComponentBuilder, location:Location) => { 
    return new Promise((resolve,reject)=>{ 
     tcb.createAsync(RootCmp).then(fixture=>{         
      router.navigateByUrl('/some-path').then(()=>{ 
       expect(location.path()).toEqual('/some-path'); 
       resolve() 
      }) 
     }) 
    }) 
})) 

it('another test',inject([Router, TestComponentBuilder, Location], (router:Router, tcb:TestComponentBuilder, location:Location) => { 
    return new Promise((resolve,reject)=>{ 
     tcb.createAsync(RootCmp).then(fixture=>{         
      router.navigateByUrl('/another-path').then(()=>{ 
       expect(location.path()).toEqual('/another-path'); 
       resolve() 
      }) 
     }) 
    }) 
})) 
संबंधित मुद्दे