С тех пор, как я обновился до Angular2 rc3, все тесты, требующие ввода рутера, теперь терпят неудачу. Раньше я использовал ROUTER_FAKE_PROVIDERS, доступный из файла маршрутизатора/тестирования, но, похоже, он больше не существует. Какие-либо предложения?Угловой маршрутизатор Angular2 rc3 в тестах
0
A
ответ
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();
});
})));
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]},
];
};
Вы исправите проблему? –