2016-06-29 5 views
0

С тех пор, как я обновился до Angular2 rc3, все тесты, требующие ввода рутера, теперь терпят неудачу. Раньше я использовал ROUTER_FAKE_PROVIDERS, доступный из файла маршрутизатора/тестирования, но, похоже, он больше не существует. Какие-либо предложения?Угловой маршрутизатор Angular2 rc3 в тестах

+0

Вы исправите проблему? –

ответ

0

Посмотрите на my answer here, похоже, у вас аналогичная проблема.

При тестировании модулей иногда определенный сервис вызывает проблемы только потому, что он не используется в обычной среде. Вы можете проверить, не было ли это вызвано, без проверки единичного теста через всю службу. Сделайте это, создав класс-макет.

Основываясь на этом посту, вот что вы можете сделать:

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

Спасибо, человек, я пробовал это, но мне нужен фактический Router для зависимостей, которые у меня есть в моем коде. Я мог бы издеваться над этим, но это было бы довольно избыточно. – HomeBrew

+0

Нет проблем, я вижу. Каков ваш код в зависимости от маршрутизатора? – jhhoff02

2

Я использовал эту установку, которая работала инициализацию маршрутизатора. https://github.com/angular/angular/blob/master/modules/%40angular/router/test/router.spec.ts

Ожидайте, что Angular2 предоставит это в качестве TestProvider в ближайшее время.

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]}, 
    ]; 
};