From 3f1c5cfbf6861386730b42a846deaa6eaf49307f Mon Sep 17 00:00:00 2001 From: Josh J - Desktop Date: Sun, 12 Feb 2023 11:36:01 -0500 Subject: [PATCH 1/2] Added initialRoute param to render --- projects/testing-library/src/lib/models.ts | 15 ++++++ .../src/lib/testing-library.ts | 3 ++ projects/testing-library/tests/render.spec.ts | 47 +++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/projects/testing-library/src/lib/models.ts b/projects/testing-library/src/lib/models.ts index 51fe5f7..0e4b404 100644 --- a/projects/testing-library/src/lib/models.ts +++ b/projects/testing-library/src/lib/models.ts @@ -328,6 +328,21 @@ export interface RenderComponentOptions( routes = [], removeAngularAttributes = false, defaultImports = [], + initialRoute = '', } = { ...globalConfig, ...renderOptions }; dtlConfigure({ @@ -107,6 +108,8 @@ export async function render( const zone = safeInject(NgZone); const router = safeInject(Router); + if (initialRoute) await router.navigate([initialRoute]); + if (typeof router?.initialNavigation === 'function') { if (zone) { zone.run(() => router.initialNavigation()); diff --git a/projects/testing-library/tests/render.spec.ts b/projects/testing-library/tests/render.spec.ts index 12a1f62..b814c6c 100644 --- a/projects/testing-library/tests/render.spec.ts +++ b/projects/testing-library/tests/render.spec.ts @@ -12,6 +12,7 @@ import { import { NoopAnimationsModule, BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { TestBed } from '@angular/core/testing'; import { render, fireEvent, screen } from '../src/public_api'; +import { Resolve, RouterModule } from '@angular/router'; @Component({ selector: 'atl-fixture', @@ -296,3 +297,49 @@ describe('DebugElement', () => { expect(view.debugElement.componentInstance).toBeInstanceOf(FixtureComponent); }); }); + +describe('initialRoute', () => { + @Component({ + standalone: true, + selector: 'atl-fixture2', + template: ``, + }) + class SecondaryFixtureComponent {} + + @Component({ + standalone: true, + selector: 'atl-router-fixture', + template: ``, + imports: [RouterModule], + }) + class RouterFixtureComponent {} + + @Injectable() + class FixtureResolver implements Resolve { + public isResolved = false; + + public resolve() { + this.isResolved = true; + } + } + + it('allows initially rendering a specific route to avoid triggering a resolver for the default route', async () => { + const expectedRoute = 'correct-route'; + const routes = [ + { path: expectedRoute, component: FixtureComponent }, + { path: '**', resolve: { data: FixtureResolver }, component: SecondaryFixtureComponent }, + ]; + + await render(RouterFixtureComponent, { + initialRoute: expectedRoute, + routes, + detectChangesOnRender: false, + providers: [FixtureResolver], + }); + const resolver = TestBed.inject(FixtureResolver); + + expect(resolver.isResolved).toBe(false); + expect(screen.queryByText('Secondary Component')).not.toBeInTheDocument(); + expect(await screen.findByText('button')).toBeInTheDocument(); + }); +}); From f43bbbb208d561e3d944757217b2bb057df3594b Mon Sep 17 00:00:00 2001 From: Josh Joseph Date: Sat, 18 Feb 2023 11:34:21 -0500 Subject: [PATCH 2/2] Corrected tests based on suggestions --- projects/testing-library/tests/render.spec.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/projects/testing-library/tests/render.spec.ts b/projects/testing-library/tests/render.spec.ts index b814c6c..28e5996 100644 --- a/projects/testing-library/tests/render.spec.ts +++ b/projects/testing-library/tests/render.spec.ts @@ -324,22 +324,21 @@ describe('initialRoute', () => { } it('allows initially rendering a specific route to avoid triggering a resolver for the default route', async () => { - const expectedRoute = 'correct-route'; + const initialRoute = 'initial-route'; const routes = [ - { path: expectedRoute, component: FixtureComponent }, + { path: initialRoute, component: FixtureComponent }, { path: '**', resolve: { data: FixtureResolver }, component: SecondaryFixtureComponent }, ]; await render(RouterFixtureComponent, { - initialRoute: expectedRoute, + initialRoute, routes, - detectChangesOnRender: false, providers: [FixtureResolver], }); const resolver = TestBed.inject(FixtureResolver); expect(resolver.isResolved).toBe(false); expect(screen.queryByText('Secondary Component')).not.toBeInTheDocument(); - expect(await screen.findByText('button')).toBeInTheDocument(); + expect(screen.getByText('button')).toBeInTheDocument(); }); });