Skip to content

Commit 69531c6

Browse files
committed
test: Add more e2e tests + stricter e2e test config
1 parent 4f77f93 commit 69531c6

File tree

6 files changed

+65
-4
lines changed

6 files changed

+65
-4
lines changed

manifest.config.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export const createManifest = (
7373
"style-src 'self'",
7474
"img-src 'self'",
7575
"base-uri 'none'",
76-
'',
76+
'', // include trailing semicolon
7777
].join(';'),
7878
},
7979
cross_origin_embedder_policy: {

test/e2e/fixtures.ts

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ export const test = baseTest.extend<{
1919
`--disable-extensions-except=${extensionPath}`,
2020
`--load-extension=${extensionPath}`,
2121
],
22+
acceptDownloads: false,
23+
strictSelectors: true,
24+
offline: true, // the extension must work 100% offline
2225
});
2326
await use(context);
2427
await context.close();

test/e2e/newtab.spec.ts

+53-3
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,67 @@
1+
import type { ConsoleMessage } from '@playwright/test';
12
import { expect, test } from './fixtures';
23

4+
// TODO: Write tests to verify:
5+
// - No console logs/errors -- including/especially CSP violations
6+
// - Theme loader works
7+
// - Custom order of sections (default, reorder, remove one, remove all)
8+
// - Bookmarks load correctly
9+
// - Open tabs is correctly populated
10+
// - Open tabs events produce expected results
11+
// - Top sites is populated
12+
// - Search works
13+
// - Open extension settings link works
14+
// - Clicking on a link works:
15+
// - bookmark
16+
// - bookmark to chrome internal page
17+
// - open tab
18+
// - open tab to chrome internal page)
19+
// - Every use of the "chrome" API
20+
// - No external requests
21+
322
test('newtab page', async ({ page, extensionId }) => {
423
await page.goto(`chrome-extension://${extensionId}/newtab.html`);
524

6-
// FIXME: Better assertions
25+
await expect(page).toHaveTitle('New Tab');
26+
await expect(page).toHaveURL(`chrome-extension://${extensionId}/newtab.html`); // didn't redirect
727

828
const h2s = await page.locator('h2').all();
9-
expect(h2s).toHaveLength(5);
1029
await expect(h2s[0]).toHaveText('Open Tabs');
1130
await expect(h2s[1]).toHaveText('Bookmarks');
1231
await expect(h2s[2]).toHaveText('History');
1332
await expect(h2s[3]).toHaveText('Top Sites');
1433
await expect(h2s[4]).toHaveText('Recently Closed Tabs');
34+
await expect(h2s[0]).toBeAttached();
35+
await expect(h2s[1]).toBeAttached();
36+
await expect(h2s[2]).toBeAttached();
37+
await expect(h2s[3]).toBeAttached();
38+
await expect(h2s[4]).toBeAttached();
39+
expect(h2s).toHaveLength(5);
40+
41+
await expect(page.locator('#b')).toBeAttached(); // bookmarks
42+
await expect(page.locator('#s')).toBeAttached(); // search
43+
await expect(page.locator('#m')).toBeAttached(); // menu
44+
await expect(page.locator('#d')).toBeAttached(); // menu dropdown
45+
46+
// TODO: Move these to their own test.
47+
// const menuDropdown = page.locator('#d');
48+
// await expect(menuDropdown).toBeAttached();
49+
// await expect(menuDropdown).not.toBeVisible();
50+
51+
// TODO: More and better assertions.
1552
});
1653

17-
// TODO: Test it makes no external requests
54+
test('matches screenshot', async ({ page, extensionId }) => {
55+
await page.goto(`chrome-extension://${extensionId}/newtab.html`);
56+
await expect(page).toHaveScreenshot('newtab-default.png', { fullPage: true });
57+
});
58+
59+
test('has no console calls or unhandled errors', async ({ page, extensionId }) => {
60+
const unhandledErrors: Error[] = [];
61+
const consoleMessages: ConsoleMessage[] = [];
62+
page.on('pageerror', (err) => unhandledErrors.push(err));
63+
page.on('console', (msg) => consoleMessages.push(msg));
64+
await page.goto(`chrome-extension://${extensionId}/newtab.html`);
65+
expect(unhandledErrors).toHaveLength(0);
66+
expect(consoleMessages).toHaveLength(0);
67+
});
Loading

test/e2e/settings.spec.ts

+8
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,19 @@ test('settings page', async ({ page, extensionId }) => {
55

66
// FIXME: Better assertions
77

8+
await expect(page).toHaveTitle('New Tab');
9+
await expect(page).toHaveURL(`chrome-extension://${extensionId}/settings.html`); // didn't redirect
10+
811
const labels = await page.locator('label').all();
912
expect(labels).toHaveLength(3);
1013
await expect(labels[0]).toHaveText('Theme');
1114
await expect(labels[1]).toHaveText('Sections');
1215
await expect(labels[2]).toHaveText('Reset');
1316
});
1417

18+
test('matches screenshot', async ({ page, extensionId }) => {
19+
await page.goto(`chrome-extension://${extensionId}/settings.html`);
20+
await expect(page).toHaveScreenshot('settings-default.png', { fullPage: true });
21+
});
22+
1523
// TODO: Test it makes no external requests
Loading

0 commit comments

Comments
 (0)