@@ -19,36 +19,49 @@ import {takeWhile} from 'rxjs/operators';
19
19
import { TaskState , TaskStateZoneInterceptor } from './task-state-zone-interceptor' ;
20
20
import { UnitTestElement } from './unit-test-element' ;
21
21
22
- /** The default query function that respects shadow boundaries. */
23
- const defaultQueryFn = ( selector : string , root : Element ) => root . querySelectorAll ( selector ) ;
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 ) => ArrayLike < Element > ;
26
+ }
27
+
28
+ /** The default environment options. */
29
+ const defaultEnvironmentOptions : TestbedHarnessEnvironmentOptions = {
30
+ queryFn : ( selector : string , root : Element ) => root . querySelectorAll ( selector )
31
+ } ;
24
32
25
33
/** A `HarnessEnvironment` implementation for Angular's Testbed. */
26
34
export class TestbedHarnessEnvironment extends HarnessEnvironment < Element > {
35
+ /** Whether the environment has been destroyed. */
27
36
private _destroyed = false ;
28
37
29
38
/** Observable that emits whenever the test task state changes. */
30
39
private _taskState : Observable < TaskState > ;
31
40
41
+ /** The options for this environment. */
42
+ private _options : TestbedHarnessEnvironmentOptions ;
43
+
32
44
protected constructor ( rawRootElement : Element , private _fixture : ComponentFixture < unknown > ,
33
- private _queryFn : ( selector : string , root : Element ) => ArrayLike < Element > = defaultQueryFn ) {
45
+ options ?: TestbedHarnessEnvironmentOptions ) {
34
46
super ( rawRootElement ) ;
47
+ this . _options = { ...defaultEnvironmentOptions , ...options } ;
35
48
this . _taskState = TaskStateZoneInterceptor . setup ( ) ;
36
49
_fixture . componentRef . onDestroy ( ( ) => this . _destroyed = true ) ;
37
50
}
38
51
39
52
/** Creates a `HarnessLoader` rooted at the given fixture's root element. */
40
- static loader ( fixture : ComponentFixture < unknown > ,
41
- queryFn ?: ( selector : string , root : Element ) => ArrayLike < Element > ) : HarnessLoader {
42
- return new TestbedHarnessEnvironment ( fixture . nativeElement , fixture , queryFn ) ;
53
+ static loader ( fixture : ComponentFixture < unknown > , options ?: TestbedHarnessEnvironmentOptions ) :
54
+ HarnessLoader {
55
+ return new TestbedHarnessEnvironment ( fixture . nativeElement , fixture , options ) ;
43
56
}
44
57
45
58
/**
46
59
* Creates a `HarnessLoader` at the document root. This can be used if harnesses are
47
60
* located outside of a fixture (e.g. overlays appended to the document body).
48
61
*/
49
62
static documentRootLoader ( fixture : ComponentFixture < unknown > ,
50
- queryFn ?: ( selector : string , root : Element ) => ArrayLike < Element > ) : HarnessLoader {
51
- return new TestbedHarnessEnvironment ( document . body , fixture , queryFn ) ;
63
+ options ?: TestbedHarnessEnvironmentOptions ) : HarnessLoader {
64
+ return new TestbedHarnessEnvironment ( document . body , fixture , options ) ;
52
65
}
53
66
54
67
/**
@@ -59,8 +72,8 @@ export class TestbedHarnessEnvironment extends HarnessEnvironment<Element> {
59
72
*/
60
73
static async harnessForFixture < T extends ComponentHarness > (
61
74
fixture : ComponentFixture < unknown > , harnessType : ComponentHarnessConstructor < T > ,
62
- queryFn ?: ( selector : string , root : Element ) => ArrayLike < Element > ) : Promise < T > {
63
- const environment = new TestbedHarnessEnvironment ( fixture . nativeElement , fixture , queryFn ) ;
75
+ options ?: TestbedHarnessEnvironmentOptions ) : Promise < T > {
76
+ const environment = new TestbedHarnessEnvironment ( fixture . nativeElement , fixture , options ) ;
64
77
await environment . forceStabilize ( ) ;
65
78
return environment . createComponentHarness ( harnessType , fixture . nativeElement ) ;
66
79
}
@@ -101,11 +114,11 @@ export class TestbedHarnessEnvironment extends HarnessEnvironment<Element> {
101
114
}
102
115
103
116
protected createEnvironment ( element : Element ) : HarnessEnvironment < Element > {
104
- return new TestbedHarnessEnvironment ( element , this . _fixture , this . _queryFn ) ;
117
+ return new TestbedHarnessEnvironment ( element , this . _fixture , this . _options ) ;
105
118
}
106
119
107
120
protected async getAllRawElements ( selector : string ) : Promise < Element [ ] > {
108
121
await this . forceStabilize ( ) ;
109
- return Array . from ( this . _queryFn ( selector , this . rawRootElement ) ) ;
122
+ return Array . from ( this . _options . queryFn ( selector , this . rawRootElement ) ) ;
110
123
}
111
124
}
0 commit comments