@@ -8,6 +8,7 @@ import {describe, it} from 'node:test';
88
99import type { Browser , Frame , Page , Target } from 'puppeteer-core' ;
1010
11+ import type { ListenerMap } from '../src/PageCollector.js' ;
1112import { PageCollector } from '../src/PageCollector.js' ;
1213
1314import { getMockRequest } from './utils.js' ;
@@ -22,6 +23,9 @@ function mockListener() {
2223 listeners [ eventName ] = [ listener ] ;
2324 }
2425 } ,
26+ off ( _eventName : string , _listener : ( data : unknown ) => void ) {
27+ // no-op
28+ } ,
2529 emit ( eventName : string , data : unknown ) {
2630 for ( const listener of listeners [ eventName ] ?? [ ] ) {
2731 listener ( data ) ;
@@ -55,10 +59,12 @@ describe('PageCollector', () => {
5559 const browser = getMockBrowser ( ) ;
5660 const page = ( await browser . pages ( ) ) [ 0 ] ;
5761 const request = getMockRequest ( ) ;
58- const collector = new PageCollector ( browser , ( page , collect ) => {
59- page . on ( 'request' , req => {
60- collect ( req ) ;
61- } ) ;
62+ const collector = new PageCollector ( browser , collect => {
63+ return {
64+ request : req => {
65+ collect ( req ) ;
66+ } ,
67+ } as ListenerMap ;
6268 } ) ;
6369 await collector . init ( ) ;
6470 page . emit ( 'request' , request ) ;
@@ -71,10 +77,12 @@ describe('PageCollector', () => {
7177 const page = ( await browser . pages ( ) ) [ 0 ] ;
7278 const mainFrame = page . mainFrame ( ) ;
7379 const request = getMockRequest ( ) ;
74- const collector = new PageCollector ( browser , ( page , collect ) => {
75- page . on ( 'request' , req => {
76- collect ( req ) ;
77- } ) ;
80+ const collector = new PageCollector ( browser , collect => {
81+ return {
82+ request : req => {
83+ collect ( req ) ;
84+ } ,
85+ } as ListenerMap ;
7886 } ) ;
7987 await collector . init ( ) ;
8088 page . emit ( 'request' , request ) ;
@@ -89,10 +97,12 @@ describe('PageCollector', () => {
8997 const browser = getMockBrowser ( ) ;
9098 const page = ( await browser . pages ( ) ) [ 0 ] ;
9199 const request = getMockRequest ( ) ;
92- const collector = new PageCollector ( browser , ( page , collect ) => {
93- page . on ( 'request' , req => {
94- collect ( req ) ;
95- } ) ;
100+ const collector = new PageCollector ( browser , collect => {
101+ return {
102+ request : req => {
103+ collect ( req ) ;
104+ } ,
105+ } as ListenerMap ;
96106 } ) ;
97107 await collector . init ( ) ;
98108 page . emit ( 'request' , request ) ;
@@ -106,10 +116,12 @@ describe('PageCollector', () => {
106116 const page = ( await browser . pages ( ) ) [ 0 ] ;
107117 const mainFrame = page . mainFrame ( ) ;
108118 const request = getMockRequest ( ) ;
109- const collector = new PageCollector ( browser , ( page , collect ) => {
110- page . on ( 'request' , req => {
111- collect ( req ) ;
112- } ) ;
119+ const collector = new PageCollector ( browser , collect => {
120+ return {
121+ request : req => {
122+ collect ( req ) ;
123+ } ,
124+ } as ListenerMap ;
113125 } ) ;
114126 await collector . init ( ) ;
115127 page . emit ( 'request' , request ) ;
@@ -128,10 +140,12 @@ describe('PageCollector', () => {
128140 const browser = getMockBrowser ( ) ;
129141 const page = ( await browser . pages ( ) ) [ 0 ] ;
130142 const request = getMockRequest ( ) ;
131- const collector = new PageCollector ( browser , ( pageListener , collect ) => {
132- pageListener . on ( 'request' , req => {
133- collect ( req ) ;
134- } ) ;
143+ const collector = new PageCollector ( browser , collect => {
144+ return {
145+ request : req => {
146+ collect ( req ) ;
147+ } ,
148+ } as ListenerMap ;
135149 } ) ;
136150 await collector . init ( ) ;
137151 browser . emit ( 'targetcreated' , {
@@ -153,4 +167,33 @@ describe('PageCollector', () => {
153167
154168 assert . equal ( collector . getData ( page ) . length , 2 ) ;
155169 } ) ;
170+
171+ it ( 'should clear data on page destroy' , async ( ) => {
172+ const browser = getMockBrowser ( ) ;
173+ const page = ( await browser . pages ( ) ) [ 0 ] ;
174+ const request = getMockRequest ( ) ;
175+ const collector = new PageCollector ( browser , collect => {
176+ return {
177+ request : req => {
178+ collect ( req ) ;
179+ } ,
180+ } as ListenerMap ;
181+ } ) ;
182+ await collector . init ( ) ;
183+
184+ page . emit ( 'request' , request ) ;
185+
186+ assert . equal ( collector . getData ( page ) . length , 1 ) ;
187+
188+ browser . emit ( 'targetdestroyed' , {
189+ page ( ) {
190+ return Promise . resolve ( page ) ;
191+ } ,
192+ } as Target ) ;
193+
194+ // The page inside part is async so we need to await some time
195+ await new Promise < void > ( res => res ( ) ) ;
196+
197+ assert . equal ( collector . getData ( page ) . length , 0 ) ;
198+ } ) ;
156199} ) ;
0 commit comments