mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2026-07-12 20:48:40 +00:00
This test fails very often in CI. This should hopefully improve it. With a downclocked CPU I've got 2 errors in 10 tries. After adding ``` await page.waitForLoadState(); ``` I got no errors in 20 tries. But my testing methodology is unreliable so there's no guarantee that this helps: * `Locator.click()` documentation says that it already waits by default for caused navigation to finish * I added some `date` time measurement and `waitForLoadState` was clocking in about 5-15 ms, which shouldn't be causing the issue for `expect` that times out in 3000ms ...but e2e issues were `element(s) not found` on timeout, not wrong state, so my assumption is that somehow it is asserting the wrong snapshot of a page that isn't fully loaded Additionally, I've converted _revertion_ logic to _make consistent before testing_, which is better at handling test retries in case that the _revertion_ part of the code was never ran in previous failure. In such case test retry is guaranteed to fail as well, at least when testing locally, not sure about CI. Additionally, a completely unrelated comment fix in Playwright config. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12871 Reviewed-by: Gusted <gusted@noreply.codeberg.org>
94 lines
2.7 KiB
TypeScript
94 lines
2.7 KiB
TypeScript
import {devices, type PlaywrightTestConfig} from '@playwright/test';
|
|
|
|
const BASE_URL = process.env.GITEA_URL?.replace?.(/\/$/g, '') || 'http://localhost:3003';
|
|
|
|
/**
|
|
* @see https://playwright.dev/docs/test-configuration
|
|
* @type {import('@playwright/test').PlaywrightTestConfig}
|
|
*/
|
|
export default {
|
|
testDir: './tests/e2e/',
|
|
testMatch: /.*\.test\.e2e\.ts/, // Match any .test.e2e.ts files
|
|
|
|
// you can adjust this value locally to match your machine's power,
|
|
// or pass `--workers x` to playwright
|
|
workers: 1,
|
|
|
|
/* Maximum time one test can run for. */
|
|
timeout: 30 * 1000,
|
|
|
|
expect: {
|
|
/**
|
|
* Maximum time expect() should wait for the condition to be met.
|
|
* For example in `await expect(locator).toHaveText();`
|
|
*/
|
|
timeout: 3000,
|
|
},
|
|
|
|
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
|
forbidOnly: Boolean(process.env.CI),
|
|
|
|
/* Retry on CI only */
|
|
retries: process.env.CI ? 1 : 0,
|
|
/* fail fast */
|
|
maxFailures: process.env.CI ? 1 : 0,
|
|
|
|
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
|
reporter: process.env.CI ? 'list' : [['list'], ['html', {outputFolder: 'tests/e2e/reports/', open: 'never'}]],
|
|
|
|
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
|
use: {
|
|
headless: true, // set to false to debug
|
|
|
|
locale: 'en-US',
|
|
|
|
/* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */
|
|
actionTimeout: 3000,
|
|
|
|
/* Maximum time allowed for navigation, such as `page.goto()`. */
|
|
navigationTimeout: 10 * 1000,
|
|
|
|
/* Base URL to use in actions like `await page.goto('/')`. */
|
|
baseURL: BASE_URL,
|
|
|
|
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
|
trace: 'on-first-retry',
|
|
|
|
screenshot: 'only-on-failure',
|
|
},
|
|
|
|
/* Configure projects for major browsers */
|
|
projects: [
|
|
{
|
|
name: 'chromium',
|
|
|
|
/* Project-specific settings. */
|
|
use: {
|
|
...devices['Desktop Chrome'],
|
|
permissions: ['clipboard-read', 'clipboard-write'],
|
|
},
|
|
},
|
|
|
|
{
|
|
name: 'firefox',
|
|
use: {
|
|
...devices['Desktop Firefox'],
|
|
},
|
|
},
|
|
|
|
/* Test against mobile viewports. */
|
|
{
|
|
name: 'Mobile Chrome',
|
|
use: {
|
|
...devices['Pixel 5'],
|
|
permissions: ['clipboard-read', 'clipboard-write'],
|
|
},
|
|
},
|
|
],
|
|
|
|
/* Folder for test artifacts created during test execution such as screenshots, traces, etc. */
|
|
outputDir: 'tests/e2e/test-artifacts/',
|
|
/* Folder for explicit snapshots for visual testing */
|
|
snapshotDir: 'tests/e2e/test-snapshots/',
|
|
snapshotPathTemplate: '{snapshotDir}/snapshots/{testFilePath}/{projectName}_{arg}{ext}',
|
|
} satisfies PlaywrightTestConfig;
|