123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- /**
- * @license Angular v19.2.13
- * (c) 2010-2025 Google LLC. https://angular.io/
- * License: MIT
- */
- import * as i0 from '@angular/core';
- import { NgModule, signal, Injectable, ViewChild, Component } from '@angular/core';
- import { TestBed } from '@angular/core/testing';
- import { ROUTES, ROUTER_CONFIGURATION, Router, afterNextNavigation, RouterOutlet } from './router-Dwfin5Au.mjs';
- export { ɵEmptyOutletComponent as ɵɵEmptyOutletComponent } from './router-Dwfin5Au.mjs';
- import { RouterModule, ROUTER_PROVIDERS, withPreloading, NoPreloading } from './router_module-DTJgGWLd.mjs';
- export { RouterLink as ɵɵRouterLink, RouterLinkActive as ɵɵRouterLinkActive } from './router_module-DTJgGWLd.mjs';
- import { provideLocationMocks } from '@angular/common/testing';
- import '@angular/common';
- import 'rxjs';
- import 'rxjs/operators';
- import '@angular/platform-browser';
- /**
- * @description
- *
- * Sets up the router to be used for testing.
- *
- * The modules sets up the router to be used for testing.
- * It provides spy implementations of `Location` and `LocationStrategy`.
- *
- * @usageNotes
- * ### Example
- *
- * ```ts
- * beforeEach(() => {
- * TestBed.configureTestingModule({
- * imports: [
- * RouterModule.forRoot(
- * [{path: '', component: BlankCmp}, {path: 'simple', component: SimpleCmp}]
- * )
- * ]
- * });
- * });
- * ```
- *
- * @publicApi
- * @deprecated Use `provideRouter` or `RouterModule`/`RouterModule.forRoot` instead.
- * This module was previously used to provide a helpful collection of test fakes,
- * most notably those for `Location` and `LocationStrategy`. These are generally not
- * required anymore, as `MockPlatformLocation` is provided in `TestBed` by default.
- * However, you can use them directly with `provideLocationMocks`.
- */
- class RouterTestingModule {
- static withRoutes(routes, config) {
- return {
- ngModule: RouterTestingModule,
- providers: [
- { provide: ROUTES, multi: true, useValue: routes },
- { provide: ROUTER_CONFIGURATION, useValue: config ? config : {} },
- ],
- };
- }
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: RouterTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.13", ngImport: i0, type: RouterTestingModule, exports: [RouterModule] });
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: RouterTestingModule, providers: [
- ROUTER_PROVIDERS,
- provideLocationMocks(),
- withPreloading(NoPreloading).ɵproviders,
- { provide: ROUTES, multi: true, useValue: [] },
- ], imports: [RouterModule] });
- }
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: RouterTestingModule, decorators: [{
- type: NgModule,
- args: [{
- exports: [RouterModule],
- providers: [
- ROUTER_PROVIDERS,
- provideLocationMocks(),
- withPreloading(NoPreloading).ɵproviders,
- { provide: ROUTES, multi: true, useValue: [] },
- ],
- }]
- }] });
- class RootFixtureService {
- fixture;
- harness;
- createHarness() {
- if (this.harness) {
- throw new Error('Only one harness should be created per test.');
- }
- this.harness = new RouterTestingHarness(this.getRootFixture());
- return this.harness;
- }
- getRootFixture() {
- if (this.fixture !== undefined) {
- return this.fixture;
- }
- this.fixture = TestBed.createComponent(RootCmp);
- this.fixture.detectChanges();
- return this.fixture;
- }
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: RootFixtureService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: RootFixtureService, providedIn: 'root' });
- }
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: RootFixtureService, decorators: [{
- type: Injectable,
- args: [{ providedIn: 'root' }]
- }] });
- class RootCmp {
- outlet;
- routerOutletData = signal(undefined);
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: RootCmp, deps: [], target: i0.ɵɵFactoryTarget.Component });
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.13", type: RootCmp, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "outlet", first: true, predicate: RouterOutlet, descendants: true }], ngImport: i0, template: '<router-outlet [routerOutletData]="routerOutletData()"></router-outlet>', isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
- }
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.13", ngImport: i0, type: RootCmp, decorators: [{
- type: Component,
- args: [{
- template: '<router-outlet [routerOutletData]="routerOutletData()"></router-outlet>',
- imports: [RouterOutlet],
- }]
- }], propDecorators: { outlet: [{
- type: ViewChild,
- args: [RouterOutlet]
- }] } });
- /**
- * A testing harness for the `Router` to reduce the boilerplate needed to test routes and routed
- * components.
- *
- * @publicApi
- */
- class RouterTestingHarness {
- /**
- * Creates a `RouterTestingHarness` instance.
- *
- * The `RouterTestingHarness` also creates its own root component with a `RouterOutlet` for the
- * purposes of rendering route components.
- *
- * Throws an error if an instance has already been created.
- * Use of this harness also requires `destroyAfterEach: true` in the `ModuleTeardownOptions`
- *
- * @param initialUrl The target of navigation to trigger before returning the harness.
- */
- static async create(initialUrl) {
- const harness = TestBed.inject(RootFixtureService).createHarness();
- if (initialUrl !== undefined) {
- await harness.navigateByUrl(initialUrl);
- }
- return harness;
- }
- /**
- * Fixture of the root component of the RouterTestingHarness
- */
- fixture;
- /** @internal */
- constructor(fixture) {
- this.fixture = fixture;
- }
- /** Instructs the root fixture to run change detection. */
- detectChanges() {
- this.fixture.detectChanges();
- }
- /** The `DebugElement` of the `RouterOutlet` component. `null` if the outlet is not activated. */
- get routeDebugElement() {
- const outlet = this.fixture.componentInstance.outlet;
- if (!outlet || !outlet.isActivated) {
- return null;
- }
- return this.fixture.debugElement.query((v) => v.componentInstance === outlet.component);
- }
- /** The native element of the `RouterOutlet` component. `null` if the outlet is not activated. */
- get routeNativeElement() {
- return this.routeDebugElement?.nativeElement ?? null;
- }
- async navigateByUrl(url, requiredRoutedComponentType) {
- const router = TestBed.inject(Router);
- let resolveFn;
- const redirectTrackingPromise = new Promise((resolve) => {
- resolveFn = resolve;
- });
- afterNextNavigation(TestBed.inject(Router), resolveFn);
- await router.navigateByUrl(url);
- await redirectTrackingPromise;
- this.fixture.detectChanges();
- const outlet = this.fixture.componentInstance.outlet;
- // The outlet might not be activated if the user is testing a navigation for a guard that
- // rejects
- if (outlet && outlet.isActivated && outlet.activatedRoute.component) {
- const activatedComponent = outlet.component;
- if (requiredRoutedComponentType !== undefined &&
- !(activatedComponent instanceof requiredRoutedComponentType)) {
- throw new Error(`Unexpected routed component type. Expected ${requiredRoutedComponentType.name} but got ${activatedComponent.constructor.name}`);
- }
- return activatedComponent;
- }
- else {
- if (requiredRoutedComponentType !== undefined) {
- throw new Error(`Unexpected routed component type. Expected ${requiredRoutedComponentType.name} but the navigation did not activate any component.`);
- }
- return null;
- }
- }
- }
- export { RouterTestingHarness, RouterTestingModule, RouterOutlet as ɵɵRouterOutlet };
- //# sourceMappingURL=testing.mjs.map
|