@@ -5,9 +5,6 @@ const path = require('path')
5
5
6
6
let getMarkup
7
7
let resourceLoader
8
- // this value could be tweaked in order to let the resource
9
- // retriever get every file and jsdom execute react
10
- let timeToWaitForJsToExecute
11
8
12
9
if ( process . env . E2E_FILE ) {
13
10
const file = path . isAbsolute ( process . env . E2E_FILE )
@@ -21,8 +18,6 @@ if (process.env.E2E_FILE) {
21
18
null ,
22
19
fs . readFileSync ( path . join ( path . dirname ( file ) , resource . url . pathname ) , 'utf8' )
23
20
)
24
-
25
- timeToWaitForJsToExecute = 0
26
21
} else if ( process . env . E2E_URL ) {
27
22
getMarkup = ( ) => new Promise ( resolve => {
28
23
http . get ( process . env . E2E_URL , ( res ) => {
@@ -35,8 +30,6 @@ if (process.env.E2E_FILE) {
35
30
resourceLoader = ( resource , callback ) => {
36
31
return resource . defaultFetch ( callback )
37
32
}
38
-
39
- timeToWaitForJsToExecute = 100
40
33
} else {
41
34
it . only ( 'can run jsdom (at least one of "E2E_FILE" or "E2E_URL" environment variables must be provided)' , ( ) => {
42
35
expect ( new Error ( 'This isn\'t the error you are looking for.' ) ) . toBeUndefined ( )
@@ -47,16 +40,24 @@ export default feature => new Promise(async resolve => {
47
40
const markup = await getMarkup ( )
48
41
const host = process . env . E2E_URL || 'http://localhost:3000'
49
42
const doc = jsdom . jsdom ( markup , {
50
- features : {
51
- FetchExternalResources : [ 'script' , 'css' ] ,
52
- ProcessExternalResources : [ 'script' ] ,
43
+ features : {
44
+ FetchExternalResources : [ 'script' , 'css' ] ,
45
+ ProcessExternalResources : [ 'script' ] ,
53
46
} ,
54
47
resourceLoader,
55
48
url : `${ host } #${ feature } ` ,
56
49
virtualConsole : jsdom . createVirtualConsole ( ) . sendTo ( console ) ,
57
50
} )
58
51
59
52
doc . defaultView . addEventListener ( 'load' , ( ) => {
60
- setTimeout ( ( ) => resolve ( doc ) , timeToWaitForJsToExecute )
53
+ let tries = 0
54
+ const check = ( ) => {
55
+ if ( ++ tries > 50 || doc . querySelector ( '[id^="feature"]' ) != null ) {
56
+ resolve ( doc )
57
+ } else {
58
+ setTimeout ( check , 10 )
59
+ }
60
+ }
61
+ check ( )
61
62
} , false )
62
63
} )
0 commit comments