2016-06-29 7 views
0

Seit ich auf Angular2 rc3 aktualisiert habe, sind alle Tests, die den Router benötigen, jetzt defekt. Zuvor benutzte ich die ROUTER_FAKE_PROVIDERS, die vom Router/der Testdatei verfügbar waren, aber das scheint nicht mehr zu existieren. Irgendwelche Vorschläge?Angular2 rc3 Router in Tests injizieren

+0

Haben Sie das Problem behoben? –

Antwort

0

Werfen Sie einen Blick auf my answer here, scheinen Sie ein ähnliches Problem zu haben.

Beim Gerätetest verursacht manchmal ein bestimmter Dienst Probleme, nur weil er nicht in einer normalen Umgebung verwendet wird. Sie können testen, ob es aufgerufen wurde, ohne dass der Komponententest den gesamten Dienst durchlaufen hat. Tun Sie dies, indem Sie eine Scheinklasse erstellen.

auf diesem Posten Basierend, hier ist etwas, was man tun könnte:

describe('foo',() => { 

class MockRouter{} 

beforeEachProviders(() => [ 
    {provide: ROUTER_PROVIDERS, useClass: MockRouter} 
]); 

it('should foo', 
    async(inject([FooComponent, ROUTER_PROVIDERS], (foo: FooComponent, mockRouter: MockRouter) => { 
    expect(mockRouter).toHaveBeenCalled(); 
    }); 
}))); 
+1

Danke Mann, ich habe es versucht, aber ich brauche den Router für die Abhängigkeiten, die ich in meinem Code habe. Ich könnte alles verhöhnen, aber das wäre ziemlich überflüssig. – HomeBrew

+0

Kein Problem, ich verstehe. Worauf hängt der Code vom Router ab? – jhhoff02

2

ich dieses Setup verwendet, die den Router initialisieren gearbeitet. https://github.com/angular/angular/blob/master/modules/%40angular/router/test/router.spec.ts

Expect Angular2 bietet dies als TestProvider bald.

import {Location, LocationStrategy} from '@angular/common'; 
import {SpyLocation} from '@angular/common/testing'; 
import {MockLocationStrategy} from '@angular/common/testing/mock_location_strategy'; 
import {Component, Injector, ComponentResolver} from '@angular/core'; 
import {ActivatedRoute, ActivatedRouteSnapshot, CanActivate, CanDeactivate, DefaultUrlSerializer, Event, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Params, ROUTER_DIRECTIVES, Router, RouterConfig, RouterOutletMap, RouterStateSnapshot, RoutesRecognized, UrlSerializer} from '@angular/router'; 


export function provideTestRouter(RootCmp:any, config: RouterConfig):any[]{  
    return [ 
     RouterOutletMap, 
     {provide: UrlSerializer, useClass: DefaultUrlSerializer}, 
     {provide: Location, useClass: SpyLocation}, 
     {provide: LocationStrategy, useClass: MockLocationStrategy}, 
     { 
     provide: Router, 
     useFactory: (resolver: ComponentResolver, urlSerializer: UrlSerializer, outletMap: RouterOutletMap, location: Location, injector: Injector) => { 
      return new (<any>Router)(
      RootCmp, resolver, urlSerializer, outletMap, location, injector, config); 
     }, 
     deps: [ComponentResolver, UrlSerializer, RouterOutletMap, Location, Injector] 
     }, 
     {provide: ActivatedRoute, useFactory: (r: Router) => r.routerState.root, deps: [Router]}, 
    ]; 
}; 
Verwandte Themen