@@ -19,31 +19,49 @@ import {takeWhile} from 'rxjs/operators';
1919import { TaskState , TaskStateZoneInterceptor } from './task-state-zone-interceptor' ;
2020import { UnitTestElement } from './unit-test-element' ;
2121
22+ /** Options to configure the environment. */
23+ export interface TestbedHarnessEnvironmentOptions {
24+ /** The query function used to find DOM elements. */
25+ queryFn : ( selector : string , root : Element ) => Iterable < Element > | ArrayLike < Element > ;
26+ }
27+
28+ /** The default environment options. */
29+ const defaultEnvironmentOptions : TestbedHarnessEnvironmentOptions = {
30+ queryFn : ( selector : string , root : Element ) => root . querySelectorAll ( selector )
31+ } ;
2232
2333/** A `HarnessEnvironment` implementation for Angular's Testbed. */
2434export class TestbedHarnessEnvironment extends HarnessEnvironment < Element > {
35+ /** Whether the environment has been destroyed. */
2536 private _destroyed = false ;
2637
2738 /** Observable that emits whenever the test task state changes. */
2839 private _taskState : Observable < TaskState > ;
2940
30- protected constructor ( rawRootElement : Element , private _fixture : ComponentFixture < unknown > ) {
41+ /** The options for this environment. */
42+ private _options : TestbedHarnessEnvironmentOptions ;
43+
44+ protected constructor ( rawRootElement : Element , private _fixture : ComponentFixture < unknown > ,
45+ options ?: TestbedHarnessEnvironmentOptions ) {
3146 super ( rawRootElement ) ;
47+ this . _options = { ...defaultEnvironmentOptions , ...options } ;
3248 this . _taskState = TaskStateZoneInterceptor . setup ( ) ;
3349 _fixture . componentRef . onDestroy ( ( ) => this . _destroyed = true ) ;
3450 }
3551
3652 /** Creates a `HarnessLoader` rooted at the given fixture's root element. */
37- static loader ( fixture : ComponentFixture < unknown > ) : HarnessLoader {
38- return new TestbedHarnessEnvironment ( fixture . nativeElement , fixture ) ;
53+ static loader ( fixture : ComponentFixture < unknown > , options ?: TestbedHarnessEnvironmentOptions ) :
54+ HarnessLoader {
55+ return new TestbedHarnessEnvironment ( fixture . nativeElement , fixture , options ) ;
3956 }
4057
4158 /**
4259 * Creates a `HarnessLoader` at the document root. This can be used if harnesses are
4360 * located outside of a fixture (e.g. overlays appended to the document body).
4461 */
45- static documentRootLoader ( fixture : ComponentFixture < unknown > ) : HarnessLoader {
46- return new TestbedHarnessEnvironment ( document . body , fixture ) ;
62+ static documentRootLoader ( fixture : ComponentFixture < unknown > ,
63+ options ?: TestbedHarnessEnvironmentOptions ) : HarnessLoader {
64+ return new TestbedHarnessEnvironment ( document . body , fixture , options ) ;
4765 }
4866
4967 /**
@@ -53,8 +71,9 @@ export class TestbedHarnessEnvironment extends HarnessEnvironment<Element> {
5371 * of the fixture.
5472 */
5573 static async harnessForFixture < T extends ComponentHarness > (
56- fixture : ComponentFixture < unknown > , harnessType : ComponentHarnessConstructor < T > ) : Promise < T > {
57- const environment = new TestbedHarnessEnvironment ( fixture . nativeElement , fixture ) ;
74+ fixture : ComponentFixture < unknown > , harnessType : ComponentHarnessConstructor < T > ,
75+ options ?: TestbedHarnessEnvironmentOptions ) : Promise < T > {
76+ const environment = new TestbedHarnessEnvironment ( fixture . nativeElement , fixture , options ) ;
5877 await environment . forceStabilize ( ) ;
5978 return environment . createComponentHarness ( harnessType , fixture . nativeElement ) ;
6079 }
@@ -95,11 +114,11 @@ export class TestbedHarnessEnvironment extends HarnessEnvironment<Element> {
95114 }
96115
97116 protected createEnvironment ( element : Element ) : HarnessEnvironment < Element > {
98- return new TestbedHarnessEnvironment ( element , this . _fixture ) ;
117+ return new TestbedHarnessEnvironment ( element , this . _fixture , this . _options ) ;
99118 }
100119
101120 protected async getAllRawElements ( selector : string ) : Promise < Element [ ] > {
102121 await this . forceStabilize ( ) ;
103- return Array . from ( this . rawRootElement . querySelectorAll ( selector ) ) ;
122+ return Array . from ( this . _options . queryFn ( selector , this . rawRootElement ) ) ;
104123 }
105124}
0 commit comments