Skip to content

e2e(docs) add initial tests #7728

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 38 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
5e9ee11
e2e(docs) playwright init
Shane-Donlon Jul 15, 2025
e01f256
e2e(docs) add load tests for base docs pages
Shane-Donlon Jul 15, 2025
168e11f
e2e(docs) add docs/advanced page loads tests
Shane-Donlon Jul 15, 2025
e208752
e2e(docs) add community page loads tests
Shane-Donlon Jul 15, 2025
981271a
e2e(docs) add concepts page load tests
Shane-Donlon Jul 15, 2025
0ae7e0f
e2e(docs) add cookbook page loads tests
Shane-Donlon Jul 15, 2025
39e95f7
e2e(docs) add deployments page loads tests
Shane-Donlon Jul 15, 2025
117c535
e2e(docs) add components page loads tests
Shane-Donlon Jul 15, 2025
d301a59
e2e(docs) add guides page loads tests
Shane-Donlon Jul 15, 2025
bb3ed21
e2e(docs) add integrations page loads tests
Shane-Donlon Jul 15, 2025
887fa3e
e2e(docs) add qwik labs page loads tests
Shane-Donlon Jul 15, 2025
8544131
e2e(docs) add qwik city page load tests
Shane-Donlon Jul 15, 2025
e0c335c
e2e(docs) add references page load tests
Shane-Donlon Jul 15, 2025
dfbef2b
e2e(docs) add ecosystem page load tests
Shane-Donlon Jul 15, 2025
1230712
e2e(docs) add nav bar on mobile tests
Shane-Donlon Jul 15, 2025
e7c26fe
e2e(docs) add search bar functionality tests
Shane-Donlon Jul 15, 2025
370f1c3
lint run fmt
Shane-Donlon Jul 15, 2025
9366c66
fix(e2e): replace npm with pnpm in test scripts
Shane-Donlon Jul 15, 2025
13449f6
e2e(docs): fix version mismatches
Shane-Donlon Jul 15, 2025
bf002eb
Merge branch 'main' of https://github.com/Shane-Donlon/qwik into docs…
Shane-Donlon Aug 19, 2025
c34c726
fix: resolve package synchronization with pnpm
Shane-Donlon Aug 19, 2025
992c9d1
e2e(docs) add sandbox hello world tests
Shane-Donlon Aug 19, 2025
fd15b7c
e2e(docs) sync sidebar link expectations with current navigation
Shane-Donlon Aug 19, 2025
9ed8447
e2e -add timeout to ensure component loads
Shane-Donlon Aug 19, 2025
a188a21
e2e: update global timeouts
Shane-Donlon Aug 20, 2025
0ab7675
e2e remove unnecessary timeouts
Shane-Donlon Aug 20, 2025
d41586e
Merge branch 'main' of https://github.com/Shane-Donlon/qwik into docs…
Shane-Donlon Aug 20, 2025
7408308
e2e: use better selector for more consistent results
Shane-Donlon Aug 20, 2025
d68b52a
e2e add sandbox runtimes-less tests
Shane-Donlon Aug 21, 2025
9acbf1d
e2e: add useTask tests
Shane-Donlon Aug 21, 2025
e893be3
e2e chore: imporve options button test
Shane-Donlon Aug 21, 2025
853fa61
e2e add partial tests
Shane-Donlon Aug 21, 2025
f609ecc
e2e: add inital counter tests
Shane-Donlon Aug 21, 2025
b13e27f
e2e add intial clockVisible tests
Shane-Donlon Aug 21, 2025
870ea0f
e2e: sandbox add routing links tests
Shane-Donlon Aug 21, 2025
fbb6f61
chore: correct typo
Shane-Donlon Aug 21, 2025
5734cca
e2e: add sandbox auto-complete inital tests
Shane-Donlon Aug 21, 2025
1bdcf2d
Merge branch 'main' of https://github.com/Shane-Donlon/qwik into docs…
Shane-Donlon Aug 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions e2e/docs-e2e/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

# Playwright
node_modules/
/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/
18 changes: 18 additions & 0 deletions e2e/docs-e2e/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "docs-e2e",
"description": "",
"version": "1.0.0",
"author": "",
"devDependencies": {
"@playwright/test": "1.50.1",
"@types/node": "20.19.0"
},
"keywords": [],
"license": "ISC",
"main": "index.js",
"scripts": {
"test": "pnpm exec playwright test --config=playwright.config.ts --project=chromium",
"test-ui": "pnpm exec playwright test --config=playwright.config.ts --project=chromium --ui"
},
"type": "commonjs"
}
85 changes: 85 additions & 0 deletions e2e/docs-e2e/playwright.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import { defineConfig, devices } from '@playwright/test';

/** Read environment variables from file. https://github.com/motdotla/dotenv */
// import dotenv from 'dotenv';
// import path from 'path';
// dotenv.config({ path: path.resolve(__dirname, '.env') });

/** See https://playwright.dev/docs/test-configuration. */

const TestingURL = 'http://127.0.0.1:3000';

export default defineConfig({
testDir: './tests',
/* Global timeout for each test */
timeout: 60_000,
expect: { timeout: 60_000 },
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env.CI,
/* Retry on CI only */
retries: process.env.CI ? 2 : 0,
/* Opt out of parallel tests on CI. */
workers: process.env.CI ? 1 : undefined,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: 'html',
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
/* Base URL to use in actions like `await page.goto('/')`. */
baseURL: TestingURL,
actionTimeout: 30_000,
navigationTimeout: 60_000,
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
},

/* Configure projects for major browsers */
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'chrome',
use: { ...devices['Desktop Chrome'] },
},

{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},

{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},

/* Test against mobile viewports. */
// {
// name: 'Mobile Chrome',
// use: { ...devices['Pixel 5'] },
// },
// {
// name: 'Mobile Safari',
// use: { ...devices['iPhone 12'] },
// },

/* Test against branded browsers. */
// {
// name: 'Microsoft Edge',
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
// },
// {
// name: 'Google Chrome',
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
// },
],

/* Run your local dev server before starting the tests */
webServer: {
command: 'pnpm -C ../../ run docs.dev',
url: TestingURL,
reuseExistingServer: !process.env.CI,
},
});
93 changes: 93 additions & 0 deletions e2e/docs-e2e/tests/Docs/advanced-pages-load.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import { test, expect } from '@playwright/test';

test('Advanced Dollar Function page loads', async ({ page }) => {
await page.goto('/docs/advanced/dollar/');

await expect(page).toHaveTitle('The $ dollar sign | Advanced 📚 Qwik Documentation');
});

test('Advanced Containers page loads', async ({ page }) => {
await page.goto('/docs/advanced/containers/');
await expect(page).toHaveTitle('Containers | Advanced 📚 Qwik Documentation');
});

test('Advanced QRL page loads', async ({ page }) => {
await page.goto('/docs/advanced/qrl/');
await expect(page).toHaveTitle('QRL | Advanced 📚 Qwik Documentation');
});

test('Advanced Library page loads', async ({ page }) => {
await page.goto('/docs/advanced/library/');
await expect(page).toHaveTitle('Component library | Advanced 📚 Qwik Documentation');
});

test('Advanced Qwikloader page loads', async ({ page }) => {
await page.goto('/docs/advanced/qwikloader/');
await expect(page).toHaveTitle('Qwikloader | Advanced 📚 Qwik Documentation');
});

test('Advanced Optimizer page loads', async ({ page }) => {
await page.goto('/docs/advanced/optimizer/');
await expect(page).toHaveTitle('Optimizer Rules | Advanced 📚 Qwik Documentation');
});

test('Advanced Prefetching Modules page loads', async ({ page }) => {
await page.goto('/docs/advanced/modules-prefetching/');
await expect(page).toHaveTitle('Prefetching | Advanced 📚 Qwik Documentation');
});

test('Advanced Custom Build Directory page loads', async ({ page }) => {
await page.goto('/docs/advanced/custom-build-dir/');
await expect(page).toHaveTitle('Custom Build Output Directory | Advanced 📚 Qwik Documentation');
});

test('Advanced Vite page loads', async ({ page }) => {
await page.goto('/docs/advanced/vite/');
await expect(page).toHaveTitle('Vite | Advanced 📚 Qwik Documentation');
});

test('Advanced Routing page loads', async ({ page }) => {
await page.goto('/docs/advanced/routing/');
await expect(page).toHaveTitle('Advanced Routing | Qwik City 📚 Qwik Documentation');
});

test('Advanced Plugins page loads', async ({ page }) => {
await page.goto('/docs/advanced/plugins/');
await expect(page).toHaveTitle('Qwik Plugins | Qwik City 📚 Qwik Documentation');
});

test('Advanced Request Handling page loads', async ({ page }) => {
await page.goto('/docs/advanced/request-handling/');
await expect(page).toHaveTitle('Request Handling | Advanced 📚 Qwik Documentation');
});

test('Advanced Speculative Module Fetching page loads', async ({ page }) => {
await page.goto('/docs/advanced/speculative-module-fetching/');
await expect(page).toHaveTitle('Speculative Module Fetching | Advanced 📚 Qwik Documentation');
});

test('Advanced Menu page loads', async ({ page }) => {
await page.goto('/docs/advanced/menu/');
await expect(page).toHaveTitle('Menu | Advanced 📚 Qwik Documentation');
});

test('Advanced Generating Sitemaps page loads', async ({ page }) => {
await page.goto('/docs/advanced/sitemaps/');
await expect(page).toHaveTitle('Generating Sitemaps | Advanced 📚 Qwik Documentation');
});

test('Advanced ESLint-Rules page loads', async ({ page }) => {
await page.goto('/docs/advanced/eslint/');
// currently does not have a custom title
await expect(page).toHaveTitle('Qwik - Framework reimagined for the edge');
});

test('Advanced Content Security Policy page loads', async ({ page }) => {
await page.goto('/docs/advanced/content-security-policy/');
await expect(page).toHaveTitle('Content Security Policy | Advanced 📚 Qwik Documentation');
});

test('Advanced Complex Forms page loads', async ({ page }) => {
await page.goto('/docs/advanced/complex-forms/');
await expect(page).toHaveTitle('Complex Forms | Advanced 📚 Qwik Documentation');
});
16 changes: 16 additions & 0 deletions e2e/docs-e2e/tests/Docs/community-pages.load.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { test, expect } from '@playwright/test';

test('Community Projects page loads', async ({ page }) => {
await page.goto('/community/projects/');
await expect(page).toHaveTitle('Projects | Qwik Community 📚 Qwik Documentation');
});

test('Community Groups page loads', async ({ page }) => {
await page.goto('/community/groups/');
await expect(page).toHaveTitle('Groups | Qwik Community 📚 Qwik Documentation');
});

test('Community Values page loads', async ({ page }) => {
await page.goto('/community/values/');
await expect(page).toHaveTitle('Values | Qwik Community 📚 Qwik Documentation');
});
21 changes: 21 additions & 0 deletions e2e/docs-e2e/tests/Docs/concepts-pages-laod.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { test, expect } from '@playwright/test';

test('Concepts Think Qwik page loads', async ({ page }) => {
await page.goto('/docs/concepts/think-qwik/');
await expect(page).toHaveTitle('Think Qwik | Concepts 📚 Qwik Documentation');
});

test('Concepts Resumable page loads', async ({ page }) => {
await page.goto('/docs/concepts/resumable/');
await expect(page).toHaveTitle('Resumable | Concepts 📚 Qwik Documentation');
});

test('Concepts Progressive page loads', async ({ page }) => {
await page.goto('/docs/concepts/progressive/');
await expect(page).toHaveTitle('Progressive | Concepts 📚 Qwik Documentation');
});

test('Concepts Reactivity page loads', async ({ page }) => {
await page.goto('/docs/concepts/reactivity/');
await expect(page).toHaveTitle('Reactivity | Concepts 📚 Qwik Documentation');
});
73 changes: 73 additions & 0 deletions e2e/docs-e2e/tests/Docs/cookbook-pages-load.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { test, expect } from '@playwright/test';

test('Cookbook Overview page loads', async ({ page }) => {
await page.goto('/docs/cookbook/');
await expect(page).toHaveTitle('Cookbook | Overview 📚 Qwik Documentation');
});

test('Cookbook Algolia Search page loads', async ({ page }) => {
await page.goto('/docs/cookbook/algolia-search/');
await expect(page).toHaveTitle('Cookbook | Algolia Search 📚 Qwik Documentation');
});

test('Cookbook Combine Request Handlers page loads', async ({ page }) => {
await page.goto('/docs/cookbook/combine-request-handlers/');
await expect(page).toHaveTitle('Cookbook | Combine Request Handlers 📚 Qwik Documentation');
});

test('Cookbook Debouncer page loads', async ({ page }) => {
await page.goto('/docs/cookbook/debouncer/');
await expect(page).toHaveTitle('Cookbook | Debouncer 📚 Qwik Documentation');
});

test('Cookbook Fonts page loads', async ({ page }) => {
await page.goto('/docs/cookbook/fonts/');
await expect(page).toHaveTitle('Cookbook | Font optimization 📚 Qwik Documentation');
});

test('Cookbook Glob Import & Dynamic Import page loads', async ({ page }) => {
await page.goto('/docs/cookbook/glob-import/');
await expect(page).toHaveTitle(
'Cookbook | Glob Import with import.meta.glob 📚 Qwik Documentation'
);
});

test('Cookbook NavLink Component page loads', async ({ page }) => {
await page.goto('/docs/cookbook/nav-link/');
await expect(page).toHaveTitle('Cookbook | Navbar link 📚 Qwik Documentation');
});

test('Cookbook Deploy with Node using Docker page loads', async ({ page }) => {
await page.goto('/docs/cookbook/node-docker-deploy/');
await expect(page).toHaveTitle('Cookbook | Deploy with Node using Docker 📚 Qwik Documentation');
});

test('Cookbook Portals page loads', async ({ page }) => {
await page.goto('/docs/cookbook/portals/');
await expect(page).toHaveTitle('Cookbook | Portals 📚 Qwik Documentation');
});

test('Cookbook Streaming/deferred loaders page loads', async ({ page }) => {
await page.goto('/docs/cookbook/streaming-deferred-loaders/');
await expect(page).toHaveTitle('Cookbook | Streaming/deferred loaders 📚 Qwik Documentation');
});

test('Cookbook sync$ Events page loads', async ({ page }) => {
await page.goto('/docs/cookbook/sync-events/');
await expect(page).toHaveTitle('Cookbook | Synchronous Events with State 📚 Qwik Documentation');
});

test('Cookbook Theme Management page loads', async ({ page }) => {
await page.goto('/docs/cookbook/theme-management/');
await expect(page).toHaveTitle('Cookbook | Dark and Light Theme 📚 Qwik Documentation');
});

test('Cookbook Drag & Drop page loads', async ({ page }) => {
await page.goto('/docs/cookbook/drag&drop/');
await expect(page).toHaveTitle('Cookbook | Drag & Drop 📚 Qwik Documentation');
});

test('Cookbook View Transition API page loads', async ({ page }) => {
await page.goto('/docs/cookbook/view-transition/');
await expect(page).toHaveTitle('Cookbook | View Transition API 📚 Qwik Documentation');
});
67 changes: 67 additions & 0 deletions e2e/docs-e2e/tests/Docs/deployments-pages-load.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { test, expect } from '@playwright/test';

test('Deployments Overview page loads', async ({ page }) => {
await page.goto('/docs/deployments/');
await expect(page).toHaveTitle('Deployments | Guides 📚 Qwik Documentation');
});

test('Deployments Azure Static Web Apps Middleware page loads', async ({ page }) => {
await page.goto('/docs/deployments/azure-swa/');
await expect(page).toHaveTitle('Azure Static Web Apps | Deployments 📚 Qwik Documentation');
});

test('Deployments AWS Adapter page loads', async ({ page }) => {
await page.goto('/docs/deployments/aws-lambda/');
await expect(page).toHaveTitle('AWS Lambda | Deployments 📚 Qwik Documentation');
});

test('Deployments Firebase Adapter page loads', async ({ page }) => {
await page.goto('/docs/deployments/firebase/');
await expect(page).toHaveTitle('Firebase | Deployments 📚 Qwik Documentation');
});

test('Deployments Google Cloud Run Middleware page loads', async ({ page }) => {
await page.goto('/docs/deployments/gcp-cloud-run/');
await expect(page).toHaveTitle('Cloud Run Middleware | Deployments 📚 Qwik Documentation');
});

test('Deployments Cloudflare Pages Adapter page loads', async ({ page }) => {
await page.goto('/docs/deployments/cloudflare-pages/');
await expect(page).toHaveTitle(
'Cloudflare Pages Adapter and Middleware | Deployments 📚 Qwik Documentation'
);
});

test('Deployments Deno Middleware page loads', async ({ page }) => {
await page.goto('/docs/deployments/deno/');
await expect(page).toHaveTitle('Deno Middleware | Deployments 📚 Qwik Documentation');
});

test('Deployments Bun Middleware page loads', async ({ page }) => {
await page.goto('/docs/deployments/bun/');
await expect(page).toHaveTitle('Bun Middleware | Deployments 📚 Qwik Documentation');
});

test('Deployments Netlify Edge Adapter page loads', async ({ page }) => {
await page.goto('/docs/deployments/netlify-edge/');
await expect(page).toHaveTitle(
'Netlify Edge Adapter and Middleware | Deployments 📚 Qwik Documentation'
);
});

test('Deployments Node Middleware page loads', async ({ page }) => {
await page.goto('/docs/deployments/node/');
await expect(page).toHaveTitle('Node Middleware | Deployments 📚 Qwik Documentation');
});

test('Deployments Vercel Edge Adapter page loads', async ({ page }) => {
await page.goto('/docs/deployments/vercel-edge/');
await expect(page).toHaveTitle(
'Vercel Edge Adapter and Middleware | Deployments 📚 Qwik Documentation'
);
});

test('Deployments Static Site Adapter page loads', async ({ page }) => {
await page.goto('/docs/deployments/static/');
await expect(page).toHaveTitle('Static Site 📚 Qwik Documentation');
});
Loading
Loading