From b880be9889867ec301df768b89f31009dc0db428 Mon Sep 17 00:00:00 2001 From: Christian Siebmanns Date: Mon, 11 Sep 2023 20:46:24 +0200 Subject: [PATCH 1/4] Add stronger types --- projects/testing-library/src/lib/models.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/projects/testing-library/src/lib/models.ts b/projects/testing-library/src/lib/models.ts index 2e198a6..9d771be 100644 --- a/projects/testing-library/src/lib/models.ts +++ b/projects/testing-library/src/lib/models.ts @@ -1,4 +1,4 @@ -import { Type, DebugElement } from '@angular/core'; +import { Type, DebugElement, ModuleWithProviders, EnvironmentProviders, TypeProvider } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { Routes } from '@angular/router'; import { BoundFunction, Queries, queries, Config as dtlConfig, PrettyDOMOptions } from '@testing-library/dom'; @@ -65,6 +65,12 @@ export interface RenderResult extend ) => Promise; } +export interface ProviderInterface { + provide: any; + useValue: any; + multi?: boolean; +} + export interface RenderComponentOptions { /** * @description @@ -128,7 +134,7 @@ export interface RenderComponentOptions; /** * @description * A collection of imports needed to render the component, for example, shared modules. @@ -147,7 +153,7 @@ export interface RenderComponentOptions | ModuleWithProviders | any[]>; /** * @description * A collection of schemas needed to render the component. @@ -231,7 +237,7 @@ export interface RenderComponentOptions; /** * @description * Collection of child component specified providers to override with From 04c97117896309cd91e0afd0b58ab7bfeed71ae8 Mon Sep 17 00:00:00 2001 From: Christian Siebmanns Date: Mon, 25 Sep 2023 21:46:38 +0200 Subject: [PATCH 2/4] Fix review feedback --- projects/testing-library/src/lib/models.ts | 26 +++++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/projects/testing-library/src/lib/models.ts b/projects/testing-library/src/lib/models.ts index 9d771be..a2af859 100644 --- a/projects/testing-library/src/lib/models.ts +++ b/projects/testing-library/src/lib/models.ts @@ -1,4 +1,14 @@ -import { Type, DebugElement, ModuleWithProviders, EnvironmentProviders, TypeProvider } from '@angular/core'; +import { + Type, + DebugElement, + ModuleWithProviders, + EnvironmentProviders, + Provider, + ValueProvider, + ClassProvider, + ExistingProvider, + FactoryProvider, +} from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { Routes } from '@angular/router'; import { BoundFunction, Queries, queries, Config as dtlConfig, PrettyDOMOptions } from '@testing-library/dom'; @@ -65,12 +75,6 @@ export interface RenderResult extend ) => Promise; } -export interface ProviderInterface { - provide: any; - useValue: any; - multi?: boolean; -} - export interface RenderComponentOptions { /** * @description @@ -113,7 +117,7 @@ export interface RenderComponentOptions | any[]>; /** * @description * A collection of providers needed to render the component via Dependency Injection, for example, injectable services or tokens. @@ -134,7 +138,7 @@ export interface RenderComponentOptions; + providers?: Array; /** * @description * A collection of imports needed to render the component, for example, shared modules. @@ -153,7 +157,7 @@ export interface RenderComponentOptions | ModuleWithProviders | any[]>; + imports?: Array | ModuleWithProviders>; /** * @description * A collection of schemas needed to render the component. @@ -237,7 +241,7 @@ export interface RenderComponentOptions; + componentProviders?: Array; /** * @description * Collection of child component specified providers to override with From ec276bf89b699a494699962c279b25d3250a7212 Mon Sep 17 00:00:00 2001 From: Tim Deschryver <28659384+timdeschryver@users.noreply.github.com> Date: Mon, 23 Jun 2025 21:17:00 +0200 Subject: [PATCH 3/4] update PR --- projects/testing-library/src/lib/models.ts | 20 ++++++++----------- .../src/lib/testing-library.ts | 5 +++-- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/projects/testing-library/src/lib/models.ts b/projects/testing-library/src/lib/models.ts index 36e3997..07e96c3 100644 --- a/projects/testing-library/src/lib/models.ts +++ b/projects/testing-library/src/lib/models.ts @@ -5,12 +5,8 @@ import { EventEmitter, EnvironmentProviders, Provider, - ValueProvider, - ClassProvider, - ExistingProvider, - FactoryProvider, Signal, - InputSignalWithTransform + InputSignalWithTransform, } from '@angular/core'; import { ComponentFixture, DeferBlockBehavior, DeferBlockState, TestBed } from '@angular/core/testing'; import { Routes } from '@angular/router'; @@ -166,7 +162,7 @@ export interface RenderComponentOptions | any[]>; + declarations?: (Type | unknown[])[]; /** * @description * A collection of providers needed to render the component via Dependency Injection, for example, injectable services or tokens. @@ -187,7 +183,7 @@ export interface RenderComponentOptions; + providers?: (Provider | EnvironmentProviders)[]; /** * @description * A collection of imports needed to render the component, for example, shared modules. @@ -205,7 +201,7 @@ export interface RenderComponentOptions | ModuleWithProviders>; + imports?: (Type | ModuleWithProviders)[]; /** * @description * A collection of schemas needed to render the component. @@ -327,7 +323,7 @@ export interface RenderComponentOptions; + componentProviders?: Provider[]; /** * @description * Collection of child component specified providers to override with @@ -361,7 +357,7 @@ export interface RenderComponentOptions | any[])[]; + componentImports?: (Type | unknown[])[]; /** * @description * Queries to bind. Overrides the default set from DOM Testing Library unless merged. @@ -475,7 +471,7 @@ export interface RenderComponentOptions { component: Type; - providers: any[]; + providers: (Provider | EnvironmentProviders)[]; } // eslint-disable-next-line @typescript-eslint/no-empty-object-type @@ -509,7 +505,7 @@ export interface Config extends Pick, 'excludeCompon /** * Imports that are added to the imports */ - defaultImports: any[]; + defaultImports?: (Type | ModuleWithProviders)[]; /** * Set to `true` to use zoneless change detection. * This automatically adds `provideZonelessChangeDetection` to the default imports. diff --git a/projects/testing-library/src/lib/testing-library.ts b/projects/testing-library/src/lib/testing-library.ts index 5035220..535ef39 100644 --- a/projects/testing-library/src/lib/testing-library.ts +++ b/projects/testing-library/src/lib/testing-library.ts @@ -6,6 +6,7 @@ import { OnChanges, OutputRef, OutputRefSubscription, + Provider, SimpleChange, SimpleChanges, Type, @@ -436,7 +437,7 @@ function overrideComponentImports(sut: Type | string, imports: function overrideChildComponentProviders(componentOverrides: ComponentOverride[]) { if (componentOverrides) { for (const { component, providers } of componentOverrides) { - TestBed.overrideComponent(component, { set: { providers } }); + TestBed.overrideComponent(component, { set: { providers: providers as Provider[] } }); } } } @@ -499,7 +500,7 @@ function addAutoDeclarations( wrapper, }: Pick, 'declarations' | 'excludeComponentDeclaration' | 'wrapper'>, ) { - const nonStandaloneDeclarations = declarations?.filter((d) => !isStandalone(d)); + const nonStandaloneDeclarations = declarations.filter((d) => !isStandalone(d as Type)); if (typeof sut === 'string') { if (wrapper && isStandalone(wrapper)) { return nonStandaloneDeclarations; From 329136cbbe2cd9b6bfc599ddfd4f471c497d14db Mon Sep 17 00:00:00 2001 From: Tim Deschryver <28659384+timdeschryver@users.noreply.github.com> Date: Mon, 23 Jun 2025 21:30:11 +0200 Subject: [PATCH 4/4] fix: remove environment providers from component override --- projects/testing-library/src/lib/models.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/testing-library/src/lib/models.ts b/projects/testing-library/src/lib/models.ts index 07e96c3..656b266 100644 --- a/projects/testing-library/src/lib/models.ts +++ b/projects/testing-library/src/lib/models.ts @@ -471,7 +471,7 @@ export interface RenderComponentOptions { component: Type; - providers: (Provider | EnvironmentProviders)[]; + providers: Provider[]; } // eslint-disable-next-line @typescript-eslint/no-empty-object-type