Skip to content

Commit 1f12fe1

Browse files
committed
un-flake XHR/fetch tests
1 parent 5ade905 commit 1f12fe1

File tree

16 files changed

+184
-124
lines changed

16 files changed

+184
-124
lines changed

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/contentLengthHeader/subject.js

Lines changed: 0 additions & 9 deletions
This file was deleted.

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/contentLengthHeader/test.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { expect } from '@playwright/test';
2-
import type { Event } from '@sentry/types';
32

43
import { sentryTest } from '../../../../../utils/fixtures';
5-
import { getFirstSentryEnvelopeRequest } from '../../../../../utils/helpers';
4+
import { envelopeRequestParser, waitForErrorRequest } from '../../../../../utils/helpers';
65
import { shouldSkipReplayTest } from '../../../../../utils/replayHelpers';
76

87
sentryTest('parses response_body_size from Content-Length header if available', async ({ getLocalTestPath, page }) => {
@@ -23,9 +22,27 @@ sentryTest('parses response_body_size from Content-Length header if available',
2322
});
2423
});
2524

25+
const requestPromise = waitForErrorRequest(page);
2626
const url = await getLocalTestPath({ testDir: __dirname });
27+
await page.goto(url);
2728

28-
const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);
29+
await page.evaluate(() => {
30+
/* eslint-disable */
31+
fetch('http://localhost:7654/foo', {
32+
headers: {
33+
Accept: 'application/json',
34+
'Content-Type': 'application/json',
35+
Cache: 'no-cache',
36+
},
37+
}).then(() => {
38+
// @ts-ignore Sentry is a global
39+
Sentry.captureException('test error');
40+
});
41+
/* eslint-enable */
42+
});
43+
44+
const request = await requestPromise;
45+
const eventData = envelopeRequestParser(request);
2946

3047
expect(eventData.exception?.values).toHaveLength(1);
3148

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/noContentLengthHeader/subject.js

Lines changed: 0 additions & 9 deletions
This file was deleted.

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/noContentLengthHeader/test.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { expect } from '@playwright/test';
2-
import type { Event } from '@sentry/types';
32

43
import { sentryTest } from '../../../../../utils/fixtures';
5-
import { getFirstSentryEnvelopeRequest } from '../../../../../utils/helpers';
4+
import { envelopeRequestParser, waitForErrorRequest } from '../../../../../utils/helpers';
65
import { shouldSkipReplayTest } from '../../../../../utils/replayHelpers';
76

87
sentryTest('does not capture response_body_size without Content-Length header', async ({ getLocalTestPath, page }) => {
@@ -23,9 +22,27 @@ sentryTest('does not capture response_body_size without Content-Length header',
2322
});
2423
});
2524

25+
const requestPromise = waitForErrorRequest(page);
2626
const url = await getLocalTestPath({ testDir: __dirname });
27+
await page.goto(url);
2728

28-
const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);
29+
await page.evaluate(() => {
30+
/* eslint-disable */
31+
fetch('http://localhost:7654/foo', {
32+
headers: {
33+
Accept: 'application/json',
34+
'Content-Type': 'application/json',
35+
Cache: 'no-cache',
36+
},
37+
}).then(() => {
38+
// @ts-ignore Sentry is a global
39+
Sentry.captureException('test error');
40+
});
41+
/* eslint-enable */
42+
});
43+
44+
const request = await requestPromise;
45+
const eventData = envelopeRequestParser(request);
2946

3047
expect(eventData.exception?.values).toHaveLength(1);
3148

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/nonTextBody/subject.js

Lines changed: 0 additions & 13 deletions
This file was deleted.

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/nonTextBody/test.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { expect } from '@playwright/test';
2-
import type { Event } from '@sentry/types';
32

43
import { sentryTest } from '../../../../../utils/fixtures';
5-
import { getFirstSentryEnvelopeRequest } from '../../../../../utils/helpers';
4+
import { envelopeRequestParser, waitForErrorRequest } from '../../../../../utils/helpers';
65
import { shouldSkipReplayTest } from '../../../../../utils/replayHelpers';
76

87
sentryTest('calculates body sizes for non-string bodies', async ({ getLocalTestPath, page }) => {
@@ -20,9 +19,31 @@ sentryTest('calculates body sizes for non-string bodies', async ({ getLocalTestP
2019
});
2120
});
2221

22+
const requestPromise = waitForErrorRequest(page);
2323
const url = await getLocalTestPath({ testDir: __dirname });
24+
await page.goto(url);
2425

25-
const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);
26+
await page.evaluate(() => {
27+
/* eslint-disable */
28+
const blob = new Blob(['<html>Hello world!!</html>'], { type: 'text/html' });
29+
30+
fetch('http://localhost:7654/foo', {
31+
method: 'POST',
32+
headers: {
33+
Accept: 'application/json',
34+
'Content-Type': 'application/json',
35+
Cache: 'no-cache',
36+
},
37+
body: blob,
38+
}).then(() => {
39+
// @ts-ignore Sentry is a global
40+
Sentry.captureException('test error');
41+
});
42+
/* eslint-enable */
43+
});
44+
45+
const request = await requestPromise;
46+
const eventData = envelopeRequestParser(request);
2647

2748
expect(eventData.exception?.values).toHaveLength(1);
2849

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/requestBody/subject.js

Lines changed: 0 additions & 11 deletions
This file was deleted.

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/fetch/requestBody/test.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { expect } from '@playwright/test';
2-
import type { Event } from '@sentry/types';
32

43
import { sentryTest } from '../../../../../utils/fixtures';
5-
import { getFirstSentryEnvelopeRequest } from '../../../../../utils/helpers';
4+
import { envelopeRequestParser, waitForErrorRequest } from '../../../../../utils/helpers';
65
import { shouldSkipReplayTest } from '../../../../../utils/replayHelpers';
76

87
sentryTest('captures request_body_size when body is sent', async ({ getLocalTestPath, page }) => {
@@ -22,9 +21,29 @@ sentryTest('captures request_body_size when body is sent', async ({ getLocalTest
2221
});
2322
});
2423

24+
const requestPromise = waitForErrorRequest(page);
2525
const url = await getLocalTestPath({ testDir: __dirname });
26+
await page.goto(url);
2627

27-
const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);
28+
await page.evaluate(() => {
29+
/* eslint-disable */
30+
fetch('http://localhost:7654/foo', {
31+
method: 'POST',
32+
headers: {
33+
Accept: 'application/json',
34+
'Content-Type': 'application/json',
35+
Cache: 'no-cache',
36+
},
37+
body: '{"foo":"bar"}',
38+
}).then(() => {
39+
// @ts-ignore Sentry is a global
40+
Sentry.captureException('test error');
41+
});
42+
/* eslint-enable */
43+
});
44+
45+
const request = await requestPromise;
46+
const eventData = envelopeRequestParser(request);
2847

2948
expect(eventData.exception?.values).toHaveLength(1);
3049

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/xhr/contentLengthHeader/subject.js

Lines changed: 0 additions & 14 deletions
This file was deleted.

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/xhr/contentLengthHeader/test.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { expect } from '@playwright/test';
2-
import type { Event } from '@sentry/types';
32

43
import { sentryTest } from '../../../../../utils/fixtures';
5-
import { getFirstSentryEnvelopeRequest } from '../../../../../utils/helpers';
4+
import { envelopeRequestParser, waitForErrorRequest } from '../../../../../utils/helpers';
65
import { shouldSkipReplayTest } from '../../../../../utils/replayHelpers';
76

87
sentryTest('parses response_body_size from Content-Length header if available', async ({ getLocalTestPath, page }) => {
@@ -23,9 +22,31 @@ sentryTest('parses response_body_size from Content-Length header if available',
2322
});
2423
});
2524

25+
const requestPromise = waitForErrorRequest(page);
2626
const url = await getLocalTestPath({ testDir: __dirname });
27+
await page.goto(url);
2728

28-
const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);
29+
await page.evaluate(() => {
30+
/* eslint-disable */
31+
const xhr = new XMLHttpRequest();
32+
33+
xhr.open('GET', 'http://localhost:7654/foo');
34+
xhr.setRequestHeader('Accept', 'application/json');
35+
xhr.setRequestHeader('Content-Type', 'application/json');
36+
xhr.setRequestHeader('Cache', 'no-cache');
37+
xhr.send();
38+
39+
xhr.addEventListener('readystatechange', function () {
40+
if (xhr.readyState === 4) {
41+
// @ts-ignore Sentry is a global
42+
Sentry.captureException('test error');
43+
}
44+
});
45+
/* eslint-enable */
46+
});
47+
48+
const request = await requestPromise;
49+
const eventData = envelopeRequestParser(request);
2950

3051
expect(eventData.exception?.values).toHaveLength(1);
3152

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/xhr/noContentLengthHeader/subject.js

Lines changed: 0 additions & 14 deletions
This file was deleted.

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/xhr/noContentLengthHeader/test.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { expect } from '@playwright/test';
2-
import type { Event } from '@sentry/types';
32

43
import { sentryTest } from '../../../../../utils/fixtures';
5-
import { getFirstSentryEnvelopeRequest } from '../../../../../utils/helpers';
4+
import { envelopeRequestParser, waitForErrorRequest } from '../../../../../utils/helpers';
65
import { shouldSkipReplayTest } from '../../../../../utils/replayHelpers';
76

87
sentryTest('captures response_body_size without Content-Length header', async ({ getLocalTestPath, page }) => {
@@ -23,9 +22,31 @@ sentryTest('captures response_body_size without Content-Length header', async ({
2322
});
2423
});
2524

25+
const requestPromise = waitForErrorRequest(page);
2626
const url = await getLocalTestPath({ testDir: __dirname });
27+
await page.goto(url);
2728

28-
const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);
29+
await page.evaluate(() => {
30+
/* eslint-disable */
31+
const xhr = new XMLHttpRequest();
32+
33+
xhr.open('GET', 'http://localhost:7654/foo');
34+
xhr.setRequestHeader('Accept', 'application/json');
35+
xhr.setRequestHeader('Content-Type', 'application/json');
36+
xhr.setRequestHeader('Cache', 'no-cache');
37+
xhr.send();
38+
39+
xhr.addEventListener('readystatechange', function () {
40+
if (xhr.readyState === 4) {
41+
// @ts-ignore Sentry is a global
42+
Sentry.captureException('test error');
43+
}
44+
});
45+
/* eslint-enable */
46+
});
47+
48+
const request = await requestPromise;
49+
const eventData = envelopeRequestParser(request);
2950

3051
expect(eventData.exception?.values).toHaveLength(1);
3152

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/xhr/nonTextBody/subject.js

Lines changed: 0 additions & 16 deletions
This file was deleted.

packages/browser-integration-tests/suites/replay/extendNetworkBreadcrumbs/xhr/nonTextBody/test.ts

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { expect } from '@playwright/test';
2-
import type { Event } from '@sentry/types';
32

43
import { sentryTest } from '../../../../../utils/fixtures';
5-
import { getFirstSentryEnvelopeRequest } from '../../../../../utils/helpers';
4+
import { envelopeRequestParser, waitForErrorRequest } from '../../../../../utils/helpers';
65
import { shouldSkipReplayTest } from '../../../../../utils/replayHelpers';
76

87
sentryTest('calculates body sizes for non-string bodies', async ({ getLocalTestPath, page }) => {
@@ -20,9 +19,33 @@ sentryTest('calculates body sizes for non-string bodies', async ({ getLocalTestP
2019
});
2120
});
2221

22+
const requestPromise = waitForErrorRequest(page);
2323
const url = await getLocalTestPath({ testDir: __dirname });
24+
await page.goto(url);
2425

25-
const eventData = await getFirstSentryEnvelopeRequest<Event>(page, url);
26+
await page.evaluate(() => {
27+
/* eslint-disable */
28+
const xhr = new XMLHttpRequest();
29+
30+
const blob = new Blob(['<html>Hello world!!</html>'], { type: 'text/html' });
31+
32+
xhr.open('POST', 'http://localhost:7654/foo');
33+
xhr.setRequestHeader('Accept', 'application/json');
34+
xhr.setRequestHeader('Content-Type', 'application/json');
35+
xhr.setRequestHeader('Cache', 'no-cache');
36+
xhr.send(blob);
37+
38+
xhr.addEventListener('readystatechange', function () {
39+
if (xhr.readyState === 4) {
40+
// @ts-ignore Sentry is a global
41+
Sentry.captureException('test error');
42+
}
43+
});
44+
/* eslint-enable */
45+
});
46+
47+
const request = await requestPromise;
48+
const eventData = envelopeRequestParser(request);
2649

2750
expect(eventData.exception?.values).toHaveLength(1);
2851

0 commit comments

Comments
 (0)