mirror of
https://github.com/rookiestar28/ComfyUI-OpenClaw.git
synced 2026-08-14 00:48:07 +00:00
183 lines
6.3 KiB
Markdown
183 lines
6.3 KiB
Markdown
# ComfyUI-OpenClaw E2E Testing SOP
|
|
|
|
## Problem-First Test Design Rule
|
|
|
|
E2E scripts and mocked harness flows must be designed to reproduce failures and catch bugs early. The goal is not to make the harness pass; the goal is to make the harness fail when a real user-facing contract breaks.
|
|
|
|
When adding or reviewing E2E coverage, prefer assertions that prove final user-visible behavior, request routing, payload shape, state synchronization, and failure feedback. Avoid pass-only checks that only prove the page loaded or a mocked happy path returned.
|
|
This SOP documents the verified, repeatable steps to run Playwright E2E tests
|
|
against a local **test harness** (no live ComfyUI backend required).
|
|
|
|
Boundary:
|
|
- This file covers frontend Playwright harness E2E only.
|
|
- Backend low-mock real lanes (`R122`, `R123`) are specified in `tests/TEST_SOP.md`.
|
|
|
|
## 1. Requirements
|
|
|
|
- Node.js 18+
|
|
- npm 9+
|
|
- Python 3.8+ (used by the Playwright web server: `python -m http.server 3000`)
|
|
- Playwright browsers installed (`npx playwright install chromium`)
|
|
|
|
Notes:
|
|
|
|
- The E2E suite uses `python -m http.server` like ComfyUI-Doctor.
|
|
- If your environment only has `python3`, provide a local shim named `python` (see below).
|
|
- On WSL running from `/mnt/c/...`, set a writable temp dir to avoid permission issues.
|
|
|
|
## 2. Verified Procedure
|
|
|
|
### 2.1 Windows (PowerShell)
|
|
|
|
```powershell
|
|
node -v
|
|
npm -v
|
|
python --version
|
|
|
|
npm ci
|
|
npx playwright install chromium
|
|
|
|
npm test
|
|
```
|
|
|
|
If port `3000` is blocked/reserved on your machine, set a custom E2E port:
|
|
|
|
```powershell
|
|
$env:OPENCLAW_E2E_PORT = "3300"
|
|
npm test
|
|
```
|
|
|
|
### 2.2 WSL2 (bash)
|
|
|
|
```bash
|
|
source ~/.nvm/nvm.sh
|
|
nvm use 18
|
|
node -v
|
|
python3 --version
|
|
|
|
# Provide `python` if only python3 exists
|
|
mkdir -p .tmp/bin
|
|
ln -sf "$(command -v python3)" .tmp/bin/python
|
|
|
|
npm ci
|
|
npx playwright install chromium
|
|
|
|
# Run with safe temp directory (WSL /mnt/*)
|
|
mkdir -p .tmp/playwright
|
|
TMPDIR=.tmp/playwright TMP=.tmp/playwright TEMP=.tmp/playwright \
|
|
PATH=".tmp/bin:$PATH" npm test
|
|
```
|
|
|
|
### 2.3 Optional flake-stress mode
|
|
|
|
Use this when you need to amplify timing-sensitive Playwright failures locally without changing the default `npm test` path.
|
|
|
|
- Targeted stress run:
|
|
|
|
```bash
|
|
npm run test:stress -- tests/e2e/specs/notifications.spec.js
|
|
```
|
|
|
|
- Override repeat count / workers:
|
|
|
|
```bash
|
|
OPENCLAW_PLAYWRIGHT_REPEAT_EACH=8 \
|
|
OPENCLAW_PLAYWRIGHT_STRESS_WORKERS=2 \
|
|
npm run test:stress -- tests/e2e/specs/notifications.spec.js
|
|
```
|
|
|
|
Notes:
|
|
- `npm test` remains the default deterministic acceptance path.
|
|
- `npm run test:stress` is optional and intended for flake hunting or CI-race investigation.
|
|
- The repo-local runner now forwards passthrough Playwright args, so `npm test -- <spec>` and `npm run test:stress -- <spec>` both target specific specs.
|
|
|
|
## 3. Test Harness Behavior
|
|
|
|
`tests/e2e/test-harness.html`:
|
|
|
|
- Creates a minimal mocked ComfyUI environment (`window.app`)
|
|
- Mocks `fetch()` for `/openclaw/*` and legacy `/moltbot/*` endpoints (capabilities/health + predictable errors)
|
|
- Imports `web/openclaw.js` (the real extension entry) and waits for readiness
|
|
- Sets `window.__openclawTestReady = true` and dispatches `openclaw-ready`
|
|
|
|
## 4. Common Troubleshooting
|
|
|
|
- If you see `404` / failed module imports for `scripts/app.js`, ensure tests are using the
|
|
Playwright route mock (see `tests/e2e/utils/helpers.js`).
|
|
- If tests fail only on WSL `/mnt/c`, use the temp-dir workaround above.
|
|
|
|
## 5. Transaction-Sensitive Acceptance Addendum
|
|
|
|
When a change touches a public/admin/webhook/connector or other stateful user-facing flow, the acceptance path must include at least one transaction-level assertion through the relevant surface.
|
|
|
|
Examples of acceptable transaction-level evidence:
|
|
- submit a webhook or connector callback payload and verify the resulting accepted/rejected outcome
|
|
- perform an approval or admin action and verify the persisted or rendered result
|
|
- submit a model import/download or other state-changing form/action and verify the resulting lifecycle state
|
|
- for frontend security fixes, assert the real rendered DOM sink (for example notification text staying escaped instead of becoming live markup), not only fixture/local-storage shape
|
|
|
|
Non-examples:
|
|
- loading the entry page only
|
|
- verifying only that a route exists or returns a redirect
|
|
- asserting only mocked backend behavior when the production seam is the failure point
|
|
<!-- ROOKIEUI-GLOBAL-E2E-SOP-RULES:START -->
|
|
## RookieUI-Derived Global E2E Rules
|
|
|
|
This section preserves the repo's existing E2E procedure while adding the shared Playwright/harness baseline used across this workspace.
|
|
|
|
### Problem-First Test Design Rule
|
|
|
|
E2E scripts and mocked harness flows must be designed to reproduce failures and catch bugs early. The goal is not to make the harness pass; the goal is to make the harness fail when a real user-facing contract breaks.
|
|
|
|
When adding or reviewing E2E coverage, prefer assertions that prove final user-visible behavior, request routing, payload shape, state synchronization, and failure feedback. Avoid pass-only checks that only prove the page loaded or a mocked happy path returned.
|
|
|
|
### Requirements
|
|
|
|
- Node.js 18+
|
|
- npm 9+ when the repo uses npm
|
|
- Python command available (`python` or a local shim to `python3`) when the harness serves files through Python
|
|
- Playwright Chromium installed with `npx playwright install chromium` when Playwright is used
|
|
|
|
### Windows (PowerShell)
|
|
|
|
```powershell
|
|
node -v
|
|
npm -v
|
|
python --version
|
|
|
|
npm ci
|
|
npx playwright install chromium
|
|
npm test
|
|
```
|
|
|
|
### WSL2 (bash)
|
|
|
|
```bash
|
|
source ~/.nvm/nvm.sh
|
|
nvm use 18
|
|
node -v
|
|
python3 --version
|
|
|
|
mkdir -p .tmp/bin
|
|
ln -sf "$(command -v python3)" .tmp/bin/python
|
|
|
|
npm ci
|
|
npx playwright install chromium
|
|
|
|
mkdir -p .tmp/playwright
|
|
TMPDIR=.tmp/playwright TMP=.tmp/playwright TEMP=.tmp/playwright \
|
|
PATH=".tmp/bin:$PATH" npm test
|
|
```
|
|
|
|
### Troubleshooting
|
|
|
|
- `python: command not found` on WSL: create `.tmp/bin/python` as a shim to `python3`.
|
|
- Port bind failure: use the repo-documented E2E port override or stop the conflicting process.
|
|
- Browser missing: run `npx playwright install chromium`.
|
|
- Dependency drift: remove `node_modules` and rerun `npm ci`.
|
|
|
|
### Non-applicable E2E
|
|
|
|
If the repo does not have a frontend or Playwright harness, document the non-applicability in `tests/TEST_SOP.md` and identify the replacement smoke, unit, or integration lane. Do not treat a missing E2E harness as an unrecorded pass.
|
|
<!-- ROOKIEUI-GLOBAL-E2E-SOP-RULES:END -->
|