End-to-end tests for Verdaccio across all popular package managers and the web UI.
| Package | Description |
|---|---|
@verdaccio/e2e-cli |
CLI e2e tests (publish, install, audit, etc.) |
@verdaccio/e2e-ui |
Cypress UI e2e tests (home, signin, publish) |
pnpm install
pnpm build
# CLI tests — run against any Verdaccio
./scripts/run-e2e.sh 6 npm
# UI tests — run Cypress against any Verdaccio
./scripts/run-e2e-ui.sh 6
# Full matrix (all PMs x Verdaccio 5+6)
./scripts/run-e2e-matrix.shA standalone CLI tool that runs the full Verdaccio e2e test suite against any running registry. No test framework dependency — just plain assert.
verdaccio-e2e --registry http://localhost:4873
verdaccio-e2e -r http://localhost:4873 --pm npm --pm pnpm
verdaccio-e2e -r http://localhost:4873 --test publish --test install
verdaccio-e2e -r http://localhost:4873 --pm yarn-modern=/path/to/yarn.js
verdaccio-e2e -r http://localhost:4873 -v # verbose — shows each command| Option | Description | Default |
|---|---|---|
-r, --registry <url> |
Verdaccio registry URL (required) | — |
--pm <name[=path]> |
Package manager to test (repeatable) | npm |
-t, --test <name> |
Filter tests by name (repeatable) | all supported |
--token <token> |
Auth token (skips user creation) | auto-created |
--timeout <ms> |
Per-test timeout | 50000 |
-v, --verbose |
Show each command executed | false |
| Adapter | --pm value |
Notes |
|---|---|---|
| npm | npm |
Uses --registry flag |
| pnpm | pnpm |
Uses --registry flag |
| Yarn Classic (v1) | yarn-classic |
Requires Yarn 1.x in PATH |
| Yarn Modern (v2+) | yarn-modern=/path/to/yarn.js |
Uses .yarnrc.yml for registry config |
| Test | npm | pnpm | yarn-classic | yarn-modern |
|---|---|---|---|---|
| publish | yes | yes | yes | yes |
| install | yes | yes | yes | yes |
| info | yes | yes | yes | yes |
| audit | yes | yes | yes | skip |
| deprecate | yes | yes | skip | skip |
| dist-tags | yes | yes | skip | skip |
| ping | yes | yes | skip | skip |
| search | yes | yes | skip | skip |
| star | yes | yes | skip | skip |
| unpublish | yes | yes | skip | skip |
import { createNpmAdapter, createPnpmAdapter, allTests, runAll } from '@verdaccio/e2e-cli';
const adapters = [createNpmAdapter(), createPnpmAdapter()];
const { results, exitCode } = await runAll(adapters, allTests, 'http://localhost:4873', token, {
timeout: 50000,
concurrency: 1,
});A Cypress plugin that provides reusable Verdaccio UI test suites. Run the same tests against any Verdaccio version without copying test files.
npm install @verdaccio/e2e-ui cypresscypress.config.ts
import { defineConfig } from 'cypress';
import { setupVerdaccioTasks } from '@verdaccio/e2e-ui';
export default defineConfig({
e2e: {
baseUrl: 'http://localhost:4873',
setupNodeEvents(on) {
setupVerdaccioTasks(on, { registryUrl: 'http://localhost:4873' });
},
},
});cypress/support/e2e.ts
import '@verdaccio/e2e-ui/commands';cypress/e2e/verdaccio.cy.ts
import { createRegistryConfig, registerAllTests } from '@verdaccio/e2e-ui';
const config = createRegistryConfig({ registryUrl: 'http://localhost:4873' });
registerAllTests(config);Or pick individual suites:
import { createRegistryConfig, homeTests, signinTests } from '@verdaccio/e2e-ui';
const config = createRegistryConfig({
registryUrl: 'http://localhost:4873',
title: 'My Verdaccio', // optional, default: 'Verdaccio'
credentials: { user: 'admin', password: 'admin' }, // optional
});
homeTests(config);
signinTests(config);| Suite | Tests |
|---|---|
homeTests |
Page title, help card (empty registry), 404 page |
signinTests |
Login, logout |
publishTests |
Publish package, navigate detail, readme, dependencies, versions, uplinks |
Importing @verdaccio/e2e-ui/commands adds:
| Command | Description |
|---|---|
cy.getByTestId(id) |
Find element by data-testid attribute |
cy.login(user, password) |
Login to Verdaccio UI |
| Export | Description |
|---|---|
setupVerdaccioTasks(on, options) |
Register Cypress tasks |
createRegistryConfig(options) |
Build config with defaults |
registerAllTests(config) |
Register all test suites |
homeTests(config) |
Home page tests |
signinTests(config) |
Login/logout tests |
publishTests(config) |
Package publish + detail tests |
| Script | Description |
|---|---|
./scripts/run-e2e.sh [version] [pm] |
Run CLI tests against a Verdaccio version |
./scripts/run-e2e-ui.sh [version] |
Run Cypress UI tests against a Verdaccio version |
./scripts/run-e2e-matrix.sh |
Run CLI tests for all detected PMs x Verdaccio 5+6 |
All scripts accept --docker to use Docker images instead of local npm install.
./scripts/run-e2e.sh 6 npm # CLI: verdaccio@6, npm
./scripts/run-e2e.sh 5 pnpm # CLI: verdaccio@5, pnpm
./scripts/run-e2e.sh --docker 6 npm # CLI: Docker verdaccio@6
./scripts/run-e2e-ui.sh 6 # UI: verdaccio@6
./scripts/run-e2e-ui.sh --docker 6 # UI: Docker verdaccio@6
./scripts/run-e2e-ui.sh --open # UI: interactive Cypress
./scripts/run-e2e-matrix.sh # Full CLI matrix
./scripts/run-e2e-matrix.sh --docker # Full CLI matrix via DockerAll packages built with Vite 8 in library mode. Pure ESM, no Babel.
pnpm build # build all tools
pnpm clean # clean build output