Eclipse Che is an open-source, Kubernetes-native developer workspace platform. This repository contains:
tests/e2e/— TypeScript/Mocha/Selenium end-to-end test framework (the main codebase)tests/performance/— Shell-based performance teststests/devworkspace-happy-path/— Happy-path smoke tests for DevWorkspaces
The e2e suite uses Inversify for dependency injection, Selenium WebDriver with Chrome, and Mocha in TDD style (suite/test).
All npm commands run from tests/e2e/, not the repo root:
cd tests/e2e
npm ci # install dependencies
npm run tsc # compile TypeScript
npm run lint # run eslint with --fix
npm run prettier # format with prettier# full test suite (lint + compile + run)
npm run test
# run a single test file by name (without .spec.ts)
export USERSTORY=Factory && npm run test
# driver-less tests (no browser, API-only)
USERSTORY=EmptyWorkspaceAPI npm run driver-less-testAll commands run from tests/e2e/:
# lint one file
npx eslint --fix specs/factory/Factory.spec.ts
# type-check (whole project, no single-file mode)
npm run tsc
# format one file
npx prettier --config .prettierrc.json --write specs/factory/Factory.spec.tsRun before every push — CI checks these on PRs touching tests/e2e/**:
npm run prettier && npm run tsc && npm run lint- License header: EPL-2.0 block comment required on every
.tsfile (enforced byeslint-plugin-header) - Quotes: single quotes (
'), enforced by eslint - Return types: explicit on all functions (
@typescript-eslint/explicit-function-return-type) - Formatting: prettier enforced — tabs, 140 print width, no trailing commas, LF line endings
- Comments: must start lowercase (
capitalized-comments: never) - No arrow functions in Mocha
suite/test/suiteSetup/suiteTeardowndeclarations @injectable()decorator on all page objects and utility classesLogger.debug()at the start of every public method in page objects/utils- Locators: static →
private static readonly NAME: By; dynamic → private method returningBy - Member ordering: static fields, public fields, instance fields, constructor, then methods (public → private)
Use these real files as examples when making common changes:
| Change | Example file |
|---|---|
| Add a new e2e test | tests/e2e/specs/factory/Factory.spec.ts |
| Add a new page object | tests/e2e/pageobjects/dashboard/Dashboard.ts |
| Add a new utility | tests/e2e/utils/StringUtil.ts |
| DI container registration | tests/e2e/configs/inversify.config.ts |
| DI type identifiers | tests/e2e/configs/inversify.types.ts |
| Timeout constants | tests/e2e/constants/TIMEOUT_CONSTANTS.ts |
| File | Purpose |
|---|---|
tests/e2e/tsconfig.json |
TypeScript config — target es2021, commonjs, strict, decorators enabled |
tests/e2e/.eslintrc.js |
ESLint rules — extends @typescript-eslint/recommended-type-checked + prettier |
tests/e2e/.prettierrc.json |
Prettier config — tabs, single quotes, 140 width, no trailing commas |
tests/e2e/package.json |
npm scripts and dependencies |
| Variable | Description |
|---|---|
TS_SELENIUM_BASE_URL |
Che dashboard URL |
TS_SELENIUM_OCP_USERNAME |
OpenShift username |
TS_SELENIUM_OCP_PASSWORD |
OpenShift password |
USERSTORY |
Test file to run (without .spec.ts) |
TS_PLATFORM |
openshift or kubernetes |
Before modifying tests/e2e/, read:
tests/e2e/CLAUDE.mdfor detailed development guidance.tests/e2e/CODE_STYLE.mdfor required coding standards.tests/e2e/README.mdfor setup and execution prerequisites.
Existing agent workflows:
tests/e2e/.claude/skills/e2e-test-developer/SKILL.mdtests/e2e/.claude/commands/run-e2e-test.md
When adding a page object, register its identifier and binding in
tests/e2e/configs/inversify.types.ts and
tests/e2e/configs/inversify.config.ts