blob: 551c8cbcb7daa256675df9d0522723770df551af [file] [log] [blame]
/**
* @license
* Copyright 2020 The Go Authors. All rights reserved.
* Use of this source code is governed by a BSD-style
* license that can be found in the LICENSE file.
*/
import './globals';
import puppeteer, { Page } from 'puppeteer';
const baseUrl = process.env.FRONTEND_URL ?? '';
const el = (id: string) => `[data-test-id="${id}"]`;
const selectors = {
fetchButton: el('fetch-button'),
fetchMessage: el('fetch-message'),
};
describe('Frontend Fetch', () => {
let page: Page;
beforeAll(async () => {
page = await browser.newPage();
await page.goto(baseUrl + '/rsc.io/quote');
});
afterAll(async () => {
await page.close();
});
test('accessibility tree matches snapshot', async () => {
const a11yTree = await page.accessibility.snapshot();
expect(a11yTree).toMatchSnapshot();
});
test('desktop viewport matches image snapshot', async () => {
const image = await page.screenshot({ fullPage: true });
expect(image).toMatchImageSnapshot();
});
test('mobile viewport matches image snapshot', async () => {
await page.emulate(puppeteer.devices['Pixel 2']);
const image = await page.screenshot({ fullPage: true });
expect(image).toMatchImageSnapshot();
});
test('clicking fetch button fetches module and navigates to page', async () => {
expect(await page.title()).toBe('404 Not Found · pkg.go.dev');
await page.click(selectors.fetchButton);
const message = await page.$eval(selectors.fetchMessage, el => el.textContent);
expect(message).toBe('Fetching rsc.io/quote');
await page.waitForNavigation();
expect(await page.title()).toBe('quote · pkg.go.dev');
}, 30000);
});