fix(router): properly assign ExtraOptions to Router in RouterTestingModule (#39096)
Previously, RouterTestingModule only assigned two of the options within ExtraOptions to the Router. Now, it assigns the same options as RouterModule does (with the exception of enableTracing) via a new shared function assignExtraOptionsToRouter. Fixes #23347 PR Close #39096
This commit is contained in:
parent
faa81dcdd1
commit
d8c05347c3
|
@ -8,5 +8,5 @@
|
||||||
|
|
||||||
|
|
||||||
export {ɵEmptyOutletComponent} from './components/empty_outlet';
|
export {ɵEmptyOutletComponent} from './components/empty_outlet';
|
||||||
export {ROUTER_PROVIDERS as ɵROUTER_PROVIDERS} from './router_module';
|
export {assignExtraOptionsToRouter as ɵassignExtraOptionsToRouter, ROUTER_PROVIDERS as ɵROUTER_PROVIDERS} from './router_module';
|
||||||
export {flatten as ɵflatten} from './utils/collection';
|
export {flatten as ɵflatten} from './utils/collection';
|
||||||
|
|
|
@ -448,13 +448,7 @@ export function setupRouter(
|
||||||
router.routeReuseStrategy = routeReuseStrategy;
|
router.routeReuseStrategy = routeReuseStrategy;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opts.errorHandler) {
|
assignExtraOptionsToRouter(opts, router);
|
||||||
router.errorHandler = opts.errorHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opts.malformedUriErrorHandler) {
|
|
||||||
router.malformedUriErrorHandler = opts.malformedUriErrorHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opts.enableTracing) {
|
if (opts.enableTracing) {
|
||||||
const dom = getDOM();
|
const dom = getDOM();
|
||||||
|
@ -466,6 +460,18 @@ export function setupRouter(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return router;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function assignExtraOptionsToRouter(opts: ExtraOptions, router: Router): void {
|
||||||
|
if (opts.errorHandler) {
|
||||||
|
router.errorHandler = opts.errorHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opts.malformedUriErrorHandler) {
|
||||||
|
router.malformedUriErrorHandler = opts.malformedUriErrorHandler;
|
||||||
|
}
|
||||||
|
|
||||||
if (opts.onSameUrlNavigation) {
|
if (opts.onSameUrlNavigation) {
|
||||||
router.onSameUrlNavigation = opts.onSameUrlNavigation;
|
router.onSameUrlNavigation = opts.onSameUrlNavigation;
|
||||||
}
|
}
|
||||||
|
@ -474,15 +480,13 @@ export function setupRouter(
|
||||||
router.paramsInheritanceStrategy = opts.paramsInheritanceStrategy;
|
router.paramsInheritanceStrategy = opts.paramsInheritanceStrategy;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opts.urlUpdateStrategy) {
|
|
||||||
router.urlUpdateStrategy = opts.urlUpdateStrategy;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opts.relativeLinkResolution) {
|
if (opts.relativeLinkResolution) {
|
||||||
router.relativeLinkResolution = opts.relativeLinkResolution;
|
router.relativeLinkResolution = opts.relativeLinkResolution;
|
||||||
}
|
}
|
||||||
|
|
||||||
return router;
|
if (opts.urlUpdateStrategy) {
|
||||||
|
router.urlUpdateStrategy = opts.urlUpdateStrategy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rootRoute(router: Router): ActivatedRoute {
|
export function rootRoute(router: Router): ActivatedRoute {
|
||||||
|
|
|
@ -5625,30 +5625,54 @@ describe('Integration', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Testing router options', () => {
|
describe('Testing router options', () => {
|
||||||
describe('paramsInheritanceStrategy', () => {
|
describe('should configure the router', () => {
|
||||||
beforeEach(() => {
|
it('assigns errorHandler', () => {
|
||||||
|
function errorHandler(error: any) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
TestBed.configureTestingModule(
|
TestBed.configureTestingModule(
|
||||||
{imports: [RouterTestingModule.withRoutes([], {paramsInheritanceStrategy: 'always'})]});
|
{imports: [RouterTestingModule.withRoutes([], {errorHandler})]});
|
||||||
|
const router: Router = TestBed.inject(Router);
|
||||||
|
expect(router.errorHandler).toBe(errorHandler);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should configure the router', fakeAsync(inject([Router], (router: Router) => {
|
it('assigns malformedUriErrorHandler', () => {
|
||||||
expect(router.paramsInheritanceStrategy).toEqual('always');
|
|
||||||
})));
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('malformedUriErrorHandler', () => {
|
|
||||||
function malformedUriErrorHandler(e: URIError, urlSerializer: UrlSerializer, url: string) {
|
function malformedUriErrorHandler(e: URIError, urlSerializer: UrlSerializer, url: string) {
|
||||||
return urlSerializer.parse('/error');
|
return urlSerializer.parse('/error');
|
||||||
}
|
}
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
TestBed.configureTestingModule(
|
TestBed.configureTestingModule(
|
||||||
{imports: [RouterTestingModule.withRoutes([], {malformedUriErrorHandler})]});
|
{imports: [RouterTestingModule.withRoutes([], {malformedUriErrorHandler})]});
|
||||||
|
const router: Router = TestBed.inject(Router);
|
||||||
|
expect(router.malformedUriErrorHandler).toBe(malformedUriErrorHandler);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should configure the router', fakeAsync(inject([Router], (router: Router) => {
|
it('assigns onSameUrlNavigation', () => {
|
||||||
expect(router.malformedUriErrorHandler).toBe(malformedUriErrorHandler);
|
TestBed.configureTestingModule(
|
||||||
})));
|
{imports: [RouterTestingModule.withRoutes([], {onSameUrlNavigation: 'reload'})]});
|
||||||
|
const router: Router = TestBed.inject(Router);
|
||||||
|
expect(router.onSameUrlNavigation).toBe('reload');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('assigns paramsInheritanceStrategy', () => {
|
||||||
|
TestBed.configureTestingModule(
|
||||||
|
{imports: [RouterTestingModule.withRoutes([], {paramsInheritanceStrategy: 'always'})]});
|
||||||
|
const router: Router = TestBed.inject(Router);
|
||||||
|
expect(router.paramsInheritanceStrategy).toBe('always');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('assigns relativeLinkResolution', () => {
|
||||||
|
TestBed.configureTestingModule(
|
||||||
|
{imports: [RouterTestingModule.withRoutes([], {relativeLinkResolution: 'corrected'})]});
|
||||||
|
const router: Router = TestBed.inject(Router);
|
||||||
|
expect(router.relativeLinkResolution).toBe('corrected');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('assigns urlUpdateStrategy', () => {
|
||||||
|
TestBed.configureTestingModule(
|
||||||
|
{imports: [RouterTestingModule.withRoutes([], {urlUpdateStrategy: 'eager'})]});
|
||||||
|
const router: Router = TestBed.inject(Router);
|
||||||
|
expect(router.urlUpdateStrategy).toBe('eager');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
import {Location, LocationStrategy} from '@angular/common';
|
import {Location, LocationStrategy} from '@angular/common';
|
||||||
import {MockLocationStrategy, SpyLocation} from '@angular/common/testing';
|
import {MockLocationStrategy, SpyLocation} from '@angular/common/testing';
|
||||||
import {Compiler, Injectable, Injector, ModuleWithProviders, NgModule, NgModuleFactory, NgModuleFactoryLoader, Optional} from '@angular/core';
|
import {Compiler, Injectable, Injector, ModuleWithProviders, NgModule, NgModuleFactory, NgModuleFactoryLoader, Optional} from '@angular/core';
|
||||||
import {ChildrenOutletContexts, ExtraOptions, NoPreloading, PreloadingStrategy, provideRoutes, Route, Router, ROUTER_CONFIGURATION, RouterModule, ROUTES, Routes, UrlHandlingStrategy, UrlSerializer, ɵflatten as flatten, ɵROUTER_PROVIDERS as ROUTER_PROVIDERS} from '@angular/router';
|
import {ChildrenOutletContexts, ExtraOptions, NoPreloading, PreloadingStrategy, provideRoutes, Route, Router, ROUTER_CONFIGURATION, RouterModule, ROUTES, Routes, UrlHandlingStrategy, UrlSerializer, ɵassignExtraOptionsToRouter as assignExtraOptionsToRouter, ɵflatten as flatten, ɵROUTER_PROVIDERS as ROUTER_PROVIDERS} from '@angular/router';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -124,14 +124,7 @@ export function setupTestingRouter(
|
||||||
router.urlHandlingStrategy = opts;
|
router.urlHandlingStrategy = opts;
|
||||||
} else {
|
} else {
|
||||||
// Handle ExtraOptions
|
// Handle ExtraOptions
|
||||||
|
assignExtraOptionsToRouter(opts, router);
|
||||||
if (opts.malformedUriErrorHandler) {
|
|
||||||
router.malformedUriErrorHandler = opts.malformedUriErrorHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opts.paramsInheritanceStrategy) {
|
|
||||||
router.paramsInheritanceStrategy = opts.paramsInheritanceStrategy;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue