Skip to content

Commit b6a6142

Browse files
authored
test(tracing): Add tests for backgroundtab. (#4443)
1 parent 6309dd6 commit b6a6142

File tree

7 files changed

+108
-0
lines changed

7 files changed

+108
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import * as Sentry from '@sentry/browser';
2+
import { Integrations } from '@sentry/tracing';
3+
4+
window.Sentry = Sentry;
5+
6+
Sentry.init({
7+
dsn: 'https://public@dsn.ingest.sentry.io/1337',
8+
integrations: [new Integrations.BrowserTracing({ idleTimeout: 9000 })],
9+
tracesSampleRate: 1,
10+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
document.getElementById('go-background').addEventListener('click', () => {
2+
Object.defineProperty(document, 'hidden', { value: true, writable: true });
3+
const ev = document.createEvent('Event');
4+
ev.initEvent('visibilitychange');
5+
document.dispatchEvent(ev);
6+
});
7+
8+
document.getElementById('start-transaction').addEventListener('click', () => {
9+
window.transaction = Sentry.startTransaction({ name: 'test-transaction' });
10+
Sentry.getCurrentHub().configureScope(scope => scope.setSpan(window.transaction));
11+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<script src="{{htmlWebpackPlugin.options.initialization}}"></script>
5+
</head>
6+
<body>
7+
<button id="start-transaction">Start Transaction</button>
8+
<button id="go-background">New Tab</button>
9+
<script src="{{htmlWebpackPlugin.options.subject}}"></script>
10+
</body>
11+
</html>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { expect, JSHandle } from '@playwright/test';
2+
3+
import { sentryTest } from '../../../../utils/fixtures';
4+
import { getSentryTransactionRequest } from '../../../../utils/helpers';
5+
6+
async function getPropertyValue(handle: JSHandle, prop: string) {
7+
return (await handle.getProperty(prop))?.jsonValue();
8+
}
9+
10+
sentryTest('should finish a custom transaction when the page goes background', async ({ getLocalTestPath, page }) => {
11+
const url = await getLocalTestPath({ testDir: __dirname });
12+
13+
const pageloadTransaction = await getSentryTransactionRequest(page, url);
14+
expect(pageloadTransaction).toBeDefined();
15+
16+
await page.click('#start-transaction');
17+
const transactionHandle = await page.evaluateHandle('window.transaction');
18+
19+
const id_before = await getPropertyValue(transactionHandle, 'span_id');
20+
const name_before = await getPropertyValue(transactionHandle, 'name');
21+
const status_before = await getPropertyValue(transactionHandle, 'status');
22+
const tags_before = await getPropertyValue(transactionHandle, 'tags');
23+
24+
expect(name_before).toBe('test-transaction');
25+
expect(status_before).toBeUndefined();
26+
expect(tags_before).toStrictEqual({});
27+
28+
await page.click('#go-background');
29+
30+
const id_after = await getPropertyValue(transactionHandle, 'span_id');
31+
const name_after = await getPropertyValue(transactionHandle, 'name');
32+
const status_after = await getPropertyValue(transactionHandle, 'status');
33+
const tags_after = await getPropertyValue(transactionHandle, 'tags');
34+
35+
expect(id_before).toBe(id_after);
36+
expect(name_after).toBe(name_before);
37+
expect(status_after).toBe('cancelled');
38+
expect(tags_after).toStrictEqual({ finishReason: 'documentHidden', visibilitychange: 'document.hidden' });
39+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
document.getElementById('go-background').addEventListener('click', () => {
2+
Object.defineProperty(document, 'hidden', { value: true, writable: true });
3+
const ev = document.createEvent('Event');
4+
ev.initEvent('visibilitychange');
5+
document.dispatchEvent(ev);
6+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<html>
2+
<head>
3+
<script src='{{htmlWebpackPlugin.options.initialization}}'></script>
4+
</head>
5+
<body>
6+
]
7+
<button id='go-background'>New Tab</button>
8+
<script src='{{htmlWebpackPlugin.options.subject}}'></script>
9+
</body>
10+
</html>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { expect } from '@playwright/test';
2+
3+
import { sentryTest } from '../../../../utils/fixtures';
4+
import { getSentryTransactionRequest } from '../../../../utils/helpers';
5+
6+
sentryTest('should finish pageload transaction when the page goes background', async ({ getLocalTestPath, page }) => {
7+
const url = await getLocalTestPath({ testDir: __dirname });
8+
9+
await page.goto(url);
10+
11+
page.click('#go-background');
12+
13+
const pageloadTransaction = await getSentryTransactionRequest(page);
14+
15+
expect(pageloadTransaction.contexts?.trace.op).toBe('pageload');
16+
expect(pageloadTransaction.contexts?.trace.status).toBe('cancelled');
17+
expect(pageloadTransaction.contexts?.trace.tags).toMatchObject({
18+
visibilitychange: 'document.hidden',
19+
finishReason: 'documentHidden',
20+
});
21+
});

0 commit comments

Comments
 (0)