16
16
*/
17
17
18
18
import { it , expect } from './fixtures' ;
19
- import type { Frame , Page } from '..' ;
19
+ import type { Frame } from '..' ;
20
20
import { TestServer } from '../utils/testserver' ;
21
21
22
22
it ( 'should navigate to empty page with networkidle' , async ( { page, server} ) => {
@@ -25,22 +25,19 @@ it('should navigate to empty page with networkidle', async ({page, server}) => {
25
25
} ) ;
26
26
27
27
async function networkIdleTest ( frame : Frame , server : TestServer , action : ( ) => Promise < any > , isSetContent ?: boolean ) {
28
- const finishResponse = response => {
29
- response . statusCode = 404 ;
30
- response . end ( `File not found` ) ;
31
- } ;
32
- const waitForRequest = suffix => {
28
+ const waitForRequest = ( suffix : string ) => {
33
29
return Promise . all ( [
34
30
server . waitForRequest ( suffix ) ,
35
- ( frame [ '_page' ] as Page ) . waitForRequest ( server . PREFIX + suffix ) ,
31
+ frame . page ( ) . waitForRequest ( server . PREFIX + suffix ) ,
36
32
] ) ;
37
33
} ;
38
- const responses = { } ;
34
+
35
+ let responseA , responseB ;
39
36
// Hold on to a bunch of requests without answering.
40
- server . setRoute ( '/fetch-request-a.js' , ( req , res ) => responses [ 'a' ] = res ) ;
37
+ server . setRoute ( '/fetch-request-a.js' , ( req , res ) => responseA = res ) ;
41
38
const firstFetchResourceRequested = waitForRequest ( '/fetch-request-a.js' ) ;
42
- server . setRoute ( '/fetch-request-d .js' , ( req , res ) => responses [ 'd' ] = res ) ;
43
- const secondFetchResourceRequested = waitForRequest ( '/fetch-request-d .js' ) ;
39
+ server . setRoute ( '/fetch-request-b .js' , ( req , res ) => responseB = res ) ;
40
+ const secondFetchResourceRequested = waitForRequest ( '/fetch-request-b .js' ) ;
44
41
45
42
const waitForLoadPromise = isSetContent ? Promise . resolve ( ) : frame . waitForNavigation ( { waitUntil : 'load' } ) ;
46
43
@@ -60,17 +57,21 @@ async function networkIdleTest(frame: Frame, server: TestServer, action: () => P
60
57
await firstFetchResourceRequested ;
61
58
expect ( actionFinished ) . toBe ( false ) ;
62
59
63
- expect ( responses [ 'a' ] ) . toBeTruthy ( ) ;
64
- // Finishing response should trigger the second round.
65
- finishResponse ( responses [ 'a' ] ) ;
60
+ // Trigger the second request.
61
+ await frame . page ( ) . evaluate ( ( ) => window [ 'fetchSecond' ] ( ) ) ;
62
+ // Finish the first request.
63
+ responseA . statusCode = 404 ;
64
+ responseA . end ( `File not found` ) ;
66
65
67
66
// Wait for the second round to be requested.
68
67
await secondFetchResourceRequested ;
69
68
expect ( actionFinished ) . toBe ( false ) ;
70
- // Finishing the last response should trigger networkidle.
69
+
70
+ // Finishing the second response should trigger networkidle.
71
71
let timerTriggered = false ;
72
72
const timer = setTimeout ( ( ) => timerTriggered = true , 500 ) ;
73
- finishResponse ( responses [ 'd' ] ) ;
73
+ responseB . statusCode = 404 ;
74
+ responseB . end ( `File not found` ) ;
74
75
75
76
const response = await actionPromise ;
76
77
clearTimeout ( timer ) ;
0 commit comments