@@ -3,32 +3,76 @@ const puppeteer = require('puppeteer');
3
3
const getServer = require ( './_get-server.js' ) ;
4
4
5
5
const port = 9003 ;
6
- let server , browser , page ;
6
+ let server , browser ;
7
7
8
8
test . before ( async function ( ) {
9
9
server = getServer ( ) ;
10
10
server . listen ( port ) ;
11
11
browser = await puppeteer . launch ( ) ;
12
- page = await browser . newPage ( ) ;
13
- await page . goto ( `http://localhost:${ port } /test/html/page-load.html` ) ;
14
12
} ) ;
15
13
16
14
test . after ( async function ( ) {
17
- page . close ( ) ;
18
15
await browser . close ( ) ;
19
16
server . close ( ) ;
20
17
} ) ;
21
18
19
+ async function withPage ( t , run ) {
20
+ let page = await browser . newPage ( ) ;
21
+ await page . goto ( `http://localhost:${ port } /test/html/page-load.html` ) ;
22
+
23
+ try {
24
+ await run ( t , page ) ;
25
+ } finally {
26
+ page . close ( ) ;
27
+ }
28
+ }
29
+
22
30
// ------ tests ------ //
23
31
24
- test ( 'page-load- error' , async ( t ) => {
32
+ test ( 'pageLoad error 404 ' , withPage , async ( t , page ) => {
25
33
t . plan ( 2 ) ;
26
34
27
35
let assertions = await page . evaluate ( function ( ) {
28
36
let infScroll = new InfiniteScroll ( '.container' , {
29
37
path : ( ) => 'page/4.html' ,
30
38
} ) ;
31
39
40
+ infScroll . on ( 'load' , function ( ) {
41
+ serialT . fail ( 'load event should not trigger' ) ;
42
+ } ) ;
43
+
44
+ let eventPromises = Promise . all ( [
45
+ // request event
46
+ new Promise ( function ( resolve ) {
47
+ infScroll . on ( 'request' , function ( ) {
48
+ serialT . pass ( 'request event' ) ;
49
+ resolve ( ) ;
50
+ } ) ;
51
+ } ) ,
52
+ // error event
53
+ new Promise ( function ( resolve ) {
54
+ infScroll . on ( 'error' , function ( error ) {
55
+ serialT . true ( Boolean ( error ) , 'error event, with error argument' ) ;
56
+ resolve ( ) ;
57
+ } ) ;
58
+ } ) ,
59
+ infScroll . loadNextPage ( ) ,
60
+ ] ) ;
61
+
62
+ return eventPromises . then ( ( ) => serialT . assertions ) ;
63
+ } ) ;
64
+
65
+ assertions . forEach ( ( { method, args } ) => t [ method ] ( ...args ) ) ;
66
+ } ) ;
67
+
68
+ test ( 'pageLoad error 403' , withPage , async ( t , page ) => {
69
+ // t.plan( 2 );
70
+
71
+ let assertions = await page . evaluate ( function ( ) {
72
+ let infScroll = new InfiniteScroll ( '.container' , {
73
+ path : ( ) => 'page/no-access.html' ,
74
+ } ) ;
75
+
32
76
let eventPromises = Promise . all ( [
33
77
// request event
34
78
new Promise ( function ( resolve ) {
@@ -38,9 +82,44 @@ test( 'page-load-error', async( t ) => {
38
82
} ) ;
39
83
} ) ,
40
84
// load event
85
+ // TODO this test is backwards
86
+ // load event should NOT trigger, but it does in Puppeteer, but not in browser ??
87
+ new Promise ( function ( resolve ) {
88
+ infScroll . on ( 'load' , function ( body , path , response ) {
89
+ serialT . truthy ( body ) ;
90
+ serialT . is ( response . status , 200 ) ;
91
+ resolve ( ) ;
92
+ } ) ;
93
+ } ) ,
94
+ infScroll . loadNextPage ( ) ,
95
+ ] ) ;
96
+
97
+ return eventPromises . then ( ( ) => serialT . assertions ) ;
98
+ } ) ;
99
+
100
+ assertions . forEach ( ( { method, args } ) => t [ method ] ( ...args ) ) ;
101
+ } ) ;
102
+
103
+ test ( 'pageLoad error no CORS' , withPage , async ( t , page ) => {
104
+ t . plan ( 2 ) ;
105
+
106
+ let assertions = await page . evaluate ( function ( ) {
107
+ let infScroll = new InfiniteScroll ( '.container' , {
108
+ path : ( ) => 'http://example.com' ,
109
+ } ) ;
110
+
111
+ let eventPromises = Promise . all ( [
112
+ // request event
113
+ new Promise ( function ( resolve ) {
114
+ infScroll . on ( 'request' , function ( ) {
115
+ serialT . pass ( 'request event' ) ;
116
+ resolve ( ) ;
117
+ } ) ;
118
+ } ) ,
119
+ // error event
41
120
new Promise ( function ( resolve ) {
42
121
infScroll . on ( 'error' , function ( error ) {
43
- serialT . truthy ( Boolean ( error ) , 'error event, with error argument' ) ;
122
+ serialT . true ( Boolean ( error ) , 'error event, with error argument' ) ;
44
123
resolve ( ) ;
45
124
} ) ;
46
125
} ) ,
0 commit comments