Skip to content

Commit 840da5c

Browse files
committed
chore(tests): Update Playwright to latest in browser integration tests
1 parent 2171633 commit 840da5c

File tree

17 files changed

+125
-109
lines changed

17 files changed

+125
-109
lines changed

dev-packages/browser-integration-tests/package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@
99
"private": true,
1010
"scripts": {
1111
"clean": "rimraf -g suites/**/dist loader-suites/**/dist tmp",
12-
"install-browsers": "playwright install --with-deps",
12+
"install-browsers": "npx playwright install --with-deps",
1313
"lint": "eslint . --format stylish",
1414
"fix": "eslint . --format stylish --fix",
1515
"type-check": "tsc",
16+
"postinstall": "yarn install-browsers",
1617
"pretest": "yarn clean && yarn type-check",
17-
"test": "playwright test ./suites --project='chromium'",
18-
"test:all": "playwright test ./suites",
18+
"test": "yarn test:all --project='chromium'",
19+
"test:all": "npx playwright test -c playwright.browser.config.ts",
1920
"test:bundle:es5": "PW_BUNDLE=bundle_es5 yarn test",
2021
"test:bundle:es5:min": "PW_BUNDLE=bundle_es5_min yarn test",
2122
"test:bundle:es6": "PW_BUNDLE=bundle_es6 yarn test",
@@ -30,29 +31,28 @@
3031
"test:bundle:tracing:replay:es6:min": "PW_BUNDLE=bundle_tracing_replay_es6_min yarn test",
3132
"test:cjs": "PW_BUNDLE=cjs yarn test",
3233
"test:esm": "PW_BUNDLE=esm yarn test",
33-
"test:loader": "playwright test ./loader-suites --project='chromium'",
34+
"test:loader": "npx playwright test -c playwright.loader.config.ts --project='chromium'",
3435
"test:loader:base": "PW_BUNDLE=loader_base yarn test:loader",
3536
"test:loader:eager": "PW_BUNDLE=loader_eager yarn test:loader",
3637
"test:loader:tracing": "PW_BUNDLE=loader_tracing yarn test:loader",
3738
"test:loader:replay": "PW_BUNDLE=loader_replay yarn test:loader",
3839
"test:loader:full": "PW_BUNDLE=loader_tracing_replay yarn test:loader",
3940
"test:loader:debug": "PW_BUNDLE=loader_debug yarn test:loader",
40-
"test:ci": "playwright test ./suites --reporter='line'",
41+
"test:ci": "yarn test:all --reporter='line'",
4142
"test:update-snapshots": "yarn test:all --update-snapshots",
4243
"test:detect-flaky": "ts-node scripts/detectFlakyTests.ts",
4344
"validate:es5": "es-check es5 'fixtures/loader.js'"
4445
},
4546
"dependencies": {
4647
"@babel/preset-typescript": "^7.16.7",
47-
"@playwright/test": "^1.31.1",
48+
"@playwright/test": "^1.40.1",
4849
"@sentry-internal/rrweb": "2.7.3",
4950
"@sentry/browser": "7.93.0",
5051
"@sentry/tracing": "7.93.0",
5152
"axios": "1.6.0",
5253
"babel-loader": "^8.2.2",
5354
"html-webpack-plugin": "^5.5.0",
5455
"pako": "^2.1.0",
55-
"playwright": "^1.31.1",
5656
"webpack": "^5.52.0"
5757
},
5858
"devDependencies": {
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { PlaywrightTestConfig } from '@playwright/test';
2+
import CorePlaywrightConfig from './playwright.config';
3+
4+
const config: PlaywrightTestConfig = {
5+
...CorePlaywrightConfig,
6+
testDir: './suites',
7+
};
8+
9+
export default config;

dev-packages/browser-integration-tests/playwright.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const config: PlaywrightTestConfig = {
88
// Use 3 workers on CI, else use defaults (based on available CPU cores)
99
// Note that 3 is a random number selected to work well with our CI setup
1010
workers: process.env.CI ? 3 : undefined,
11+
testMatch: /test.ts/,
1112

1213
projects: [
1314
{
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { PlaywrightTestConfig } from '@playwright/test';
2+
import CorePlaywrightConfig from './playwright.config';
3+
4+
const config: PlaywrightTestConfig = {
5+
...CorePlaywrightConfig,
6+
testDir: './loader-suites',
7+
};
8+
9+
export default config;

dev-packages/browser-integration-tests/scripts/detectFlakyTests.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ ${changedPaths.join('\n')}
4343
try {
4444
await new Promise<void>((resolve, reject) => {
4545
const cp = childProcess.spawn(
46-
`yarn playwright test ${
46+
`npx playwright test ${
4747
testPaths.length ? testPaths.join(' ') : './suites'
4848
} --reporter='line' --repeat-each ${runCount}`,
4949
{ shell: true, cwd },

dev-packages/browser-integration-tests/suites/integrations/Breadcrumbs/dom/click/test.ts

Lines changed: 50 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -4,62 +4,57 @@ import type { Event } from '@sentry/types';
44
import { sentryTest } from '../../../../../utils/fixtures';
55
import { getFirstSentryEnvelopeRequest } from '../../../../../utils/helpers';
66

7-
sentryTest(
8-
'captures Breadcrumb for clicks & debounces them for a second',
9-
async ({ getLocalTestUrl, page, browserName }) => {
10-
sentryTest.skip(browserName === 'chromium', 'This consistently flakes on chrome.');
11-
12-
const url = await getLocalTestUrl({ testDir: __dirname });
13-
14-
await page.route('**/foo', route => {
15-
return route.fulfill({
16-
status: 200,
17-
body: JSON.stringify({
18-
userNames: ['John', 'Jane'],
19-
}),
20-
headers: {
21-
'Content-Type': 'application/json',
22-
},
23-
});
24-
});
25-
26-
const promise = getFirstSentryEnvelopeRequest<Event>(page);
27-
28-
await page.goto(url);
29-
30-
await page.click('#button1');
31-
// not debounced because other target
32-
await page.click('#button2');
33-
// This should be debounced
34-
await page.click('#button2');
35-
36-
// Wait a second for the debounce to finish
37-
await page.waitForTimeout(1000);
38-
await page.click('#button2');
39-
40-
const [eventData] = await Promise.all([promise, page.evaluate('Sentry.captureException("test exception")')]);
41-
42-
expect(eventData.exception?.values).toHaveLength(1);
43-
44-
expect(eventData.breadcrumbs).toEqual([
45-
{
46-
timestamp: expect.any(Number),
47-
category: 'ui.click',
48-
message: 'body > button#button1[type="button"]',
49-
},
50-
{
51-
timestamp: expect.any(Number),
52-
category: 'ui.click',
53-
message: 'body > button#button2[type="button"]',
54-
},
55-
{
56-
timestamp: expect.any(Number),
57-
category: 'ui.click',
58-
message: 'body > button#button2[type="button"]',
7+
sentryTest('captures Breadcrumb for clicks & debounces them for a second', async ({ getLocalTestUrl, page }) => {
8+
const url = await getLocalTestUrl({ testDir: __dirname });
9+
10+
await page.route('**/foo', route => {
11+
return route.fulfill({
12+
status: 200,
13+
body: JSON.stringify({
14+
userNames: ['John', 'Jane'],
15+
}),
16+
headers: {
17+
'Content-Type': 'application/json',
5918
},
60-
]);
61-
},
62-
);
19+
});
20+
});
21+
22+
const promise = getFirstSentryEnvelopeRequest<Event>(page);
23+
24+
await page.goto(url);
25+
26+
await page.click('#button1');
27+
// not debounced because other target
28+
await page.click('#button2');
29+
// This should be debounced
30+
await page.click('#button2');
31+
32+
// Wait a second for the debounce to finish
33+
await page.waitForTimeout(1000);
34+
await page.click('#button2');
35+
36+
const [eventData] = await Promise.all([promise, page.evaluate('Sentry.captureException("test exception")')]);
37+
38+
expect(eventData.exception?.values).toHaveLength(1);
39+
40+
expect(eventData.breadcrumbs).toEqual([
41+
{
42+
timestamp: expect.any(Number),
43+
category: 'ui.click',
44+
message: 'body > button#button1[type="button"]',
45+
},
46+
{
47+
timestamp: expect.any(Number),
48+
category: 'ui.click',
49+
message: 'body > button#button2[type="button"]',
50+
},
51+
{
52+
timestamp: expect.any(Number),
53+
category: 'ui.click',
54+
message: 'body > button#button2[type="button"]',
55+
},
56+
]);
57+
});
6358

6459
sentryTest(
6560
'uses the annotated component name in the breadcrumb messages and adds it to the data object',

dev-packages/browser-integration-tests/suites/integrations/Breadcrumbs/dom/textInput/test.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@ sentryTest('captures Breadcrumb for events on inputs & debounced them', async ({
2525

2626
await page.click('#input1');
2727
// Not debounced because other event type
28-
await page.type('#input1', 'John', { delay: 1 });
28+
await page.locator('#input1').pressSequentially('John', { delay: 1 });
29+
2930
// This should be debounced
30-
await page.type('#input1', 'Abby', { delay: 1 });
31+
await page.locator('#input1').pressSequentially('Abby', { delay: 1 });
32+
3133
// not debounced because other target
32-
await page.type('#input2', 'Anne', { delay: 1 });
34+
await page.locator('#input2').pressSequentially('Anne', { delay: 1 });
3335

3436
// Wait a second for the debounce to finish
3537
await page.waitForTimeout(1000);
36-
await page.type('#input2', 'John', { delay: 1 });
38+
await page.locator('#input2').pressSequentially('John', { delay: 1 });
3739

3840
await page.evaluate('Sentry.captureException("test exception")');
3941

@@ -87,7 +89,7 @@ sentryTest(
8789
await page.goto(url);
8890

8991
await page.click('#annotated-input');
90-
await page.type('#annotated-input', 'John', { delay: 1 });
92+
await page.locator('#annotated-input').pressSequentially('John', { delay: 1 });
9193

9294
await page.evaluate('Sentry.captureException("test exception")');
9395
const eventData = await promise;

dev-packages/browser-integration-tests/suites/tracing/browsertracing/tracePropagationTargets/customTargets/test.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@ sentryTest(
2222

2323
expect(requests).toHaveLength(3);
2424

25-
requests?.forEach(async (request: Request) => {
26-
const requestHeaders = await request.allHeaders();
25+
for (const request of requests) {
26+
const requestHeaders = request.headers();
27+
2728
expect(requestHeaders).toMatchObject({
2829
'sentry-trace': expect.any(String),
2930
baggage: expect.any(String),
3031
});
31-
});
32+
}
3233
},
3334
);

dev-packages/browser-integration-tests/suites/tracing/browsertracing/tracePropagationTargets/customTargetsAndOrigins/test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ sentryTest(
2222

2323
expect(requests).toHaveLength(3);
2424

25-
requests?.forEach(async (request: Request) => {
26-
const requestHeaders = await request.allHeaders();
27-
expect(requestHeaders).not.toMatchObject({
25+
for (const request of requests) {
26+
const requestHeaders = request.headers();
27+
expect(requestHeaders).toMatchObject({
2828
'sentry-trace': expect.any(String),
2929
baggage: expect.any(String),
3030
});
31-
});
31+
}
3232
},
3333
);

dev-packages/browser-integration-tests/suites/tracing/browsertracing/tracePropagationTargets/customTracingOrigins/test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ sentryTest(
2222

2323
expect(requests).toHaveLength(3);
2424

25-
requests?.forEach(async (request: Request) => {
26-
const requestHeaders = await request.allHeaders();
25+
for (const request of requests) {
26+
const requestHeaders = request.headers();
2727
expect(requestHeaders).toMatchObject({
2828
'sentry-trace': expect.any(String),
2929
baggage: expect.any(String),
3030
});
31-
});
31+
}
3232
},
3333
);

dev-packages/browser-integration-tests/suites/tracing/browsertracing/tracePropagationTargets/defaultTargetsMatch/test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ sentryTest(
2222

2323
expect(requests).toHaveLength(3);
2424

25-
requests?.forEach(async (request: Request) => {
26-
const requestHeaders = await request.allHeaders();
25+
for (const request of requests) {
26+
const requestHeaders = request.headers();
2727
expect(requestHeaders).toMatchObject({
2828
'sentry-trace': expect.any(String),
2929
baggage: expect.any(String),
3030
});
31-
});
31+
}
3232
},
3333
);

dev-packages/browser-integration-tests/suites/tracing/browsertracing/tracePropagationTargets/defaultTargetsNoMatch/test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ sentryTest(
2222

2323
expect(requests).toHaveLength(3);
2424

25-
requests?.forEach(async (request: Request) => {
25+
for (const request of requests) {
2626
const requestHeaders = await request.allHeaders();
2727
expect(requestHeaders).not.toMatchObject({
2828
'sentry-trace': expect.any(String),
2929
baggage: expect.any(String),
3030
});
31-
});
31+
}
3232
},
3333
);

dev-packages/browser-integration-tests/suites/tracing/request/fetch/test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,10 @@ sentryTest('should attach `sentry-trace` header to multiple fetch requests', asy
5757

5858
expect(requests).toHaveLength(3);
5959

60-
requests?.forEach(async (request: Request) => {
61-
const requestHeaders = await request.allHeaders();
60+
for (const request of requests) {
61+
const requestHeaders = request.headers();
6262
expect(requestHeaders).toMatchObject({
6363
'sentry-trace': expect.any(String),
6464
});
65-
});
65+
}
6666
});

dev-packages/browser-integration-tests/suites/tracing/request/xhr/test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ sentryTest('should attach `sentry-trace` header to multiple XHR requests', async
4545

4646
expect(requests).toHaveLength(3);
4747

48-
requests?.forEach(async (request: Request) => {
49-
const requestHeaders = await request.allHeaders();
48+
for (const request of requests) {
49+
const requestHeaders = request.headers();
5050
expect(requestHeaders).toMatchObject({
5151
'sentry-trace': expect.any(String),
5252
});
53-
});
53+
}
5454
});

dev-packages/browser-integration-tests/utils/replayEventTemplates.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export function getExpectedReplayEvent(customExpectedReplayEvent: Partial<Replay
6060

6161
export const expectedNavigationPerformanceSpan = {
6262
op: 'navigation.navigate',
63-
description: '',
63+
description: expect.any(String),
6464
startTimestamp: expect.any(Number),
6565
endTimestamp: expect.any(Number),
6666
data: {
@@ -88,7 +88,7 @@ export const expectedNavigationPushPerformanceSpan = {
8888

8989
export const expectedReloadPerformanceSpan = {
9090
op: 'navigation.reload',
91-
description: '',
91+
description: expect.any(String),
9292
startTimestamp: expect.any(Number),
9393
endTimestamp: expect.any(Number),
9494
data: {

dev-packages/browser-integration-tests/utils/replayHelpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { Page, Request, Response } from '@playwright/test';
12
/* eslint-disable max-lines */
23
import type { fullSnapshotEvent, incrementalSnapshotEvent } from '@sentry-internal/rrweb';
34
import { EventType } from '@sentry-internal/rrweb';
@@ -11,7 +12,6 @@ import type {
1112
} from '@sentry/replay/build/npm/types/types';
1213
import type { Breadcrumb, Event, ReplayEvent, ReplayRecordingMode } from '@sentry/types';
1314
import pako from 'pako';
14-
import type { Page, Request, Response } from 'playwright';
1515

1616
import { envelopeRequestParser } from './helpers';
1717

0 commit comments

Comments
 (0)