n8n/packages/testing
Savelii Sychov bf148770f8
test: Stabilize the project move-resources spec (no-changelog)
Wait for the Overview list before the first sidebar click. The list view
ends its first initialization with a `router.replace` of the query string.
Vue Router marks that location as pending before it checks for a duplicate,
so a navigation started in the same moment is cancelled and the page stays
on the Overview. The spec then counted the Overview's three workflows where
it expected the one workflow of the Personal project.

Wait for the project route after a sidebar project click, so a lost click
fails at the click and not at a later count.

Wait for the workflow transfer request to succeed before the move modal is
treated as done.

https://linear.app/n8n/issue/IAM-1459

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-29 16:00:50 +02:00
..
code-health fix: Require full ADR references in prose (no-changelog) (#39783) 2026-09-29 06:01:59 +00:00
containers test(engine): Run parity in a separate engine container (no-changelog) (#39441) 2026-09-25 11:31:14 +00:00
janitor ci: Measure PR coverage only for changed source files (no-changelog) (#39675) 2026-09-28 08:49:46 +00:00
performance build: Upgrade Vitest to v5 (no-changelog) (#39674) 2026-09-28 07:54:06 +00:00
playwright test: Stabilize the project move-resources spec (no-changelog) 2026-09-29 16:00:50 +02:00
rules-engine build: Remove unused dependencies reported by knip (no-changelog) (#38591) 2026-09-14 13:22:42 +00:00
test-impact chore: Migrate backend tooling lint to Oxlint (no-changelog) (#39825) 2026-09-29 11:42:22 +00:00
README.md refactor: Extract @n8n/test-impact (TIA) package (no-changelog) (#31868) 2026-06-08 10:20:25 +00:00

packages/testing

n8n's test platform — the infrastructure that decides what to test, runs it, and measures it. Each package is one concern; they compose rather than overlap.

Packages

Package Name Purpose Entry point Consumed by
rules-engine @n8n/rules-engine Generic, typed rules engine for static-analysis tools (register → run → report). The shared substrate. library janitor, code-health
test-impact @n8n/test-impact Test Impact Analysis: build the coverage→impact map, select impacted specs, distribute them across shards. Framework-agnostic. library janitor (CLI), playwright
janitor @n8n/playwright-janitor Static analysis + architecture enforcement for the Playwright suite; also hosts the impact/orchestrate CLI used by CI. janitor CLI playwright, CI
code-health @n8n/code-health Static analysis for monorepo dependency hygiene. code-health CLI CI
containers n8n-containers Composable Docker stack for tests (sqlite / postgres / queue / multi-main / observability / kafka …). stack:* scripts playwright, local dev
playwright n8n-playwright The E2E harness — page objects, composables, fixtures, and the shard distributor that drives CI. test:* scripts CI, local dev
performance @n8n/performance Microbenchmarks for critical code paths (bench, baseline, compare). bench:* scripts CI (nightly), local

How they fit together

graph TD
  rules[rules-engine<br/>rules substrate] --> janitor[janitor<br/>PW lint + impact CLI]
  rules --> codehealth[code-health<br/>monorepo deps]
  impact[test-impact<br/>select + distribute] --> janitor
  impact --> playwright[playwright<br/>E2E harness]
  janitor --> playwright
  containers[containers<br/>Docker stacks] --> playwright
  performance[performance<br/>benchmarks]

  classDef substrate fill:#eef,stroke:#88a;
  class rules,impact substrate;
  • Static-analysis lane: rules-engine (substrate) → janitor (Playwright architecture) and code-health (monorepo deps).
  • Selection lane: test-impact (coverage map → select → distribute) feeds the janitor CLI and the playwright shard distributor.
  • Execution lane: playwright runs E2E against containers-provided stacks.
  • Performance lane: performance is standalone (benchmarks).

Where to look (quick nav for humans + agents)

I want to… Go to
change which E2E specs a PR runs (impact map, selection, sharding) test-impact/ (+ janitor CLI select / distribute)
add/modify an architecture-lint rule for tests janitor/src/rules/ (engine: rules-engine/)
write or fix an E2E test, page object, or fixture playwright/ (see its AGENTS.md)
spin a DB/queue/multi-main stack for a test containers/ (stack:*)
add a microbenchmark performance/
enforce a monorepo dependency rule code-health/

Per-package detail lives in each package's own README.md (and playwright/AGENTS.md).