mirror of
https://github.com/ankitects/anki.git
synced 2026-06-10 06:13:34 -04:00
## Linked issue Closes #4863 ## Summary / motivation Adds Playwright as the e2e test framework so contributors can write browser-based tests against a real headless Anki instance. There was no automated way to exercise mediasrv pages, SvelteKit routes, or the `/_anki/` RPC surface from a browser, this PR establishes that harness. Key pieces: - `qt/tests/launch_anki_for_e2e.py` — spawns a throwaway Anki instance (temp `ANKI_BASE`, `QT_QPA_PLATFORM=offscreen`). Pre-seeds `prefs21.db` so Anki skips the language picker and profile chooser and goes straight to serving mediasrv. - `playwright.config.ts` — points `webServer` at the launcher; polls `/favicon.ico` as the readiness probe. - `ts/tests/e2e/` — `fixtures.ts` base and a sanity spec that verifies mediasrv is reachable and a SvelteKit page hydrates. - `justfile` — `just test-e2e` recipe; Chromium installed to `out/playwright-browsers/`. - CI — e2e step in `check-linux`; failed-run artifacts uploaded for 7 days. - `docs/e2e-testing.md` — contributor guide covering setup, managed vs reuse-server modes, and writing new tests. ## How to test Build the project once, then run the e2e suite in managed mode (no separate `./run` needed — the launcher is started automatically): ```shell just build just test-e2e ``` ## Before / after behavior (optional) Before: no browser-level test harness existed. After: `just test-e2e` drives a real headless Anki instance via Playwright. ## Risk / compatibility / migration No production code changed. New dev-only files and CI step only. Chromium is installed to `out/playwright-browsers/` (gitignored) and does not affect the regular build. --------- Co-authored-by: Abdo <abdo@abdnh.net>
105 lines
3.4 KiB
JSON
105 lines
3.4 KiB
JSON
{
|
|
"name": "anki",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"author": "Ankitects Pty Ltd and contributors",
|
|
"license": "AGPL-3.0-or-later",
|
|
"description": "Anki JS support files",
|
|
"scripts": {
|
|
"dev": "cd ts && vite dev",
|
|
"build": "cd ts && vite build",
|
|
"preview": "cd ts && vite preview",
|
|
"svelte-check:once": "cd ts && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --fail-on-warnings --threshold warning",
|
|
"svelte-check": "cd ts && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
|
"vitest:once": "cd ts && vitest run",
|
|
"vitest": "cd ts && vitest",
|
|
"test:e2e": "playwright test",
|
|
"test:e2e:ui": "playwright test --ui"
|
|
},
|
|
"devDependencies": {
|
|
"@bufbuild/protoc-gen-es": "^1.8.0",
|
|
"@playwright/test": "^1.49.0",
|
|
"@poppanator/sveltekit-svg": "^5.0.0",
|
|
"@sqltools/formatter": "^1.2.2",
|
|
"@sveltejs/adapter-static": "^3.0.0",
|
|
"@sveltejs/kit": "^2.53.3",
|
|
"@sveltejs/vite-plugin-svelte": "5.1",
|
|
"@types/bootstrap": "^5.0.12",
|
|
"@types/codemirror": "^5.60.0",
|
|
"@types/d3": "^7.0.0",
|
|
"@types/diff": "^5.0.0",
|
|
"@types/fabric": "^5.3.7",
|
|
"@types/jquery": "^3.5.0",
|
|
"@types/jqueryui": "^1.12.13",
|
|
"@types/lodash-es": "^4.17.4",
|
|
"@types/marked": "^5.0.0",
|
|
"@types/node": "^22",
|
|
"@typescript-eslint/eslint-plugin": "^5.60.1",
|
|
"@typescript-eslint/parser": "^5.60.1",
|
|
"@vitest/coverage-v8": "3.2.4",
|
|
"caniuse-lite": "^1.0.30001431",
|
|
"cross-env": "^7.0.2",
|
|
"diff": "^5.0.0",
|
|
"dprint": "^0.47.2",
|
|
"esbuild": "^0.25.3",
|
|
"esbuild-sass-plugin": "^3.3.1",
|
|
"esbuild-svelte": "^0.9.2",
|
|
"eslint": "^8.44.0",
|
|
"eslint-plugin-compat": "^4.1.4",
|
|
"eslint-plugin-import": "^2.25.4",
|
|
"eslint-plugin-svelte": "^2",
|
|
"license-checker-rseidelsohn": "=4.3.0",
|
|
"prettier": "^3.4.2",
|
|
"prettier-plugin-svelte": "^3.3.2",
|
|
"sass": "<1.77",
|
|
"svelte": "^5.53.5",
|
|
"svelte-check": "^4.2.2",
|
|
"svelte-preprocess": "^6.0.3",
|
|
"svelte-preprocess-esbuild": "^3.0.1",
|
|
"svgo": "^3.3.3",
|
|
"tslib": "^2.0.3",
|
|
"tsx": "^4.8.1",
|
|
"typescript": "^5.0.4",
|
|
"vite": "6",
|
|
"vitest": "^3"
|
|
},
|
|
"dependencies": {
|
|
"@bufbuild/protobuf": "^1.2.1",
|
|
"@floating-ui/dom": "^1.4.3",
|
|
"@fluent/bundle": "^0.18.0",
|
|
"@mdi/svg": "^7.0.96",
|
|
"@popperjs/core": "^2.11.8",
|
|
"bootstrap": "^5.3.0",
|
|
"bootstrap-icons": "^1.10.5",
|
|
"codemirror": "^5.63.1",
|
|
"d3": "^7.0.0",
|
|
"fabric": "^5.3.0",
|
|
"hammerjs": "^2.0.8",
|
|
"intl-pluralrules": "^2.0.0",
|
|
"jquery": "^3.5.1",
|
|
"jquery-ui-dist": "^1.12.1",
|
|
"lodash-es": "^4.17.23",
|
|
"lru-cache": "^10.2.0",
|
|
"marked": "^5.1.0",
|
|
"mathjax": "^3.1.2"
|
|
},
|
|
"resolutions": {
|
|
"canvas": "npm:empty-npm-package@1.0.0",
|
|
"cookie": "0.7.0",
|
|
"devalue": "^5.6.2",
|
|
"tar": "^7.5.7",
|
|
"vite": "6",
|
|
"js-yaml": "^4.1.1",
|
|
"glob": "^10.5.0"
|
|
},
|
|
"browserslist": [
|
|
"defaults",
|
|
"not op_mini all",
|
|
"not < 1%",
|
|
"Chrome 77",
|
|
"iOS 14.5"
|
|
],
|
|
"type": "module",
|
|
"packageManager": "yarn@4.11.0"
|
|
}
|