File tree Expand file tree Collapse file tree 2 files changed +48
-0
lines changed
packages/integration-tests/suites/public-api/instrumentation/eventListener-this-preservation Expand file tree Collapse file tree 2 files changed +48
-0
lines changed Original file line number Diff line number Diff line change
1
+ const btn = document . createElement ( 'button' ) ;
2
+ btn . id = 'btn' ;
3
+ document . body . appendChild ( btn ) ;
4
+
5
+ const functionListener = function ( ) {
6
+ functionCallback ( this . constructor . name ) ;
7
+ } ;
8
+
9
+ class EventHandlerClass {
10
+ handleEvent ( ) {
11
+ classInstanceCallback ( this . constructor . name ) ;
12
+ }
13
+ }
14
+ const objectListener = new EventHandlerClass ( ) ;
15
+
16
+ // Attach event listeners a few times for good measure
17
+
18
+ btn . addEventListener ( 'click' , functionListener ) ;
19
+ btn . addEventListener ( 'click' , functionListener ) ;
20
+ btn . addEventListener ( 'click' , functionListener ) ;
21
+
22
+ btn . addEventListener ( 'click' , objectListener ) ;
23
+ btn . addEventListener ( 'click' , objectListener ) ;
24
+ btn . addEventListener ( 'click' , objectListener ) ;
Original file line number Diff line number Diff line change
1
+ import { expect } from '@playwright/test' ;
2
+
3
+ import { sentryTest } from '../../../../utils/fixtures' ;
4
+
5
+ sentryTest ( 'Event listener instrumentation preserves "this" context' , async ( { getLocalTestPath, page } ) => {
6
+ const url = await getLocalTestPath ( { testDir : __dirname } ) ;
7
+ await page . goto ( url ) ;
8
+
9
+ let assertions = 0 ;
10
+
11
+ await page . exposeFunction ( 'functionCallback' , ( thisInstanceName : unknown ) => {
12
+ expect ( thisInstanceName ) . toBe ( 'HTMLButtonElement' ) ;
13
+ assertions = assertions + 1 ;
14
+ } ) ;
15
+
16
+ await page . exposeFunction ( 'classInstanceCallback' , ( thisInstanceName : unknown ) => {
17
+ expect ( thisInstanceName ) . toBe ( 'EventHandlerClass' ) ;
18
+ assertions = assertions + 1 ;
19
+ } ) ;
20
+
21
+ await page . evaluate ( 'document.getElementById("btn").click()' ) ;
22
+
23
+ expect ( assertions ) . toBe ( 2 ) ;
24
+ } ) ;
You can’t perform that action at this time.
0 commit comments