@@ -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 ) => {
@@ -32,11 +27,7 @@ if (process.env.E2E_FILE) {
32
27
} )
33
28
} )
34
29
35
- resourceLoader = ( resource , callback ) => {
36
- return resource . defaultFetch ( callback )
37
- }
38
-
39
- timeToWaitForJsToExecute = 100
30
+ resourceLoader = ( resource , callback ) => resource . defaultFetch ( callback )
40
31
} else {
41
32
it . only ( 'can run jsdom (at least one of "E2E_FILE" or "E2E_URL" environment variables must be provided)' , ( ) => {
42
33
expect ( new Error ( 'This isn\'t the error you are looking for.' ) ) . toBeUndefined ( )
@@ -47,16 +38,16 @@ export default feature => new Promise(async resolve => {
47
38
const markup = await getMarkup ( )
48
39
const host = process . env . E2E_URL || 'http://localhost:3000'
49
40
const doc = jsdom . jsdom ( markup , {
50
- features : {
51
- FetchExternalResources : [ 'script' , 'css' ] ,
52
- ProcessExternalResources : [ 'script' ] ,
41
+ features : {
42
+ FetchExternalResources : [ 'script' , 'css' ] ,
43
+ ProcessExternalResources : [ 'script' ] ,
53
44
} ,
45
+ created : ( _ , win ) => win . addEventListener ( 'ReactFeatureDidMount' , ( ) => resolve ( doc ) , true ) ,
46
+ deferClose : true ,
54
47
resourceLoader,
55
48
url : `${ host } #${ feature } ` ,
56
49
virtualConsole : jsdom . createVirtualConsole ( ) . sendTo ( console ) ,
57
50
} )
58
51
59
- doc . defaultView . addEventListener ( 'load' , ( ) => {
60
- setTimeout ( ( ) => resolve ( doc ) , timeToWaitForJsToExecute )
61
- } , false )
52
+ doc . close ( )
62
53
} )
0 commit comments