name: js-package-testing description: Vite demo and Playwright + Applitools tests for packed @opentrons JS packages in js-package-testing/. Covers components, shared-data, step-generation, and protocol-visualization. Use for integration testing, package linking, or visual testing.
JS package testing
Purpose
This project tests built packages of @opentrons/components, @opentrons/shared-data, @opentrons/step-generation, and @opentrons/protocol-visualization the way consumers would install them: pack, extract under pack/, and link with pnpm. It includes:
- A Vite demo: ProtocolDeck plus AnnotatedSteps from
@opentrons/protocol-visualization(current public surface of that package) - Playwright with Applitools Eyes for visual checks (not committed image snapshots)
Applitools
- Set
APPLITOOLS_API_KEYvia.envinjs-package-testing/(loaded byimport 'dotenv/config'inplaywright.config.ts) or export it in the shell (seejs-package-testing/.env.example). - App name in Eyes:
js-package-testing(playwright.config.ts→use.eyesConfig.appName). - Import
testfrom@applitools/eyes-playwright/fixturein specs; useeyes.check(name, { region, matchLevel })for checkpoints. - Baseline updates happen in the Applitools dashboard (or enhanced HTML report), not via
--update-snapshots.
Package linking strategy
Uses pnpm link with extracted package directories. Workflow: pnpm install → build packages as .tgz → extract to pack/ (see js-package-testing/Makefile build-local-packages). pnpm-workspace.yaml overrides pin all four @opentrons/* packages to the pack/ trees so transitive link:../ paths inside packed package.json files do not break resolution.
Project structure
js-package-testing/
├── Makefile
├── package.json
├── playwright.config.ts
├── cssModulesSideEffect.ts
├── tests/protocolDeck.spec.ts
├── src/
│ ├── App.tsx
│ ├── main.tsx
│ ├── i18n.ts
│ ├── styles.css
│ ├── locale/en/protocol_visualization.json
│ └── StackerAnalysis.json
└── pack/ # gitignored
Lint and format (monorepo root)
CI runs the same Stylelint, Prettier, and ESLint as the rest of the repo. Run from the monorepo root after make setup-js (or equivalent).
| Check | Command |
|---|---|
| Full CSS (matches CI) | make lint-css |
| Full JS | make lint-js |
| Auto-format JS/TS/JSON/CSS/MD | make format-js |
Scoped checks while editing only this package:
pnpm stylelint "js-package-testing/**/*.css"
pnpm prettier --ignore-path .eslintignore --check "js-package-testing/**/*.{ts,tsx,js,json,css,md}"
pnpm eslint --report-unused-disable-directives-severity error --ignore-pattern "node_modules/" "js-package-testing/**/*.{ts,tsx,js}"
pnpm eslint --report-unused-disable-directives-severity error --max-warnings 0 --ext .json js-package-testing/
Global styles.css uses stylelint-config-idiomatic-order (via root .stylelintrc.js): keep declarations in that order so make lint-css passes.
Makefile targets
| Target | Description |
|---|---|
make setup | Build/extract all four packages, pnpm install --frozen-lockfile |
make dev | Run Vite dev server (runs setup first) |
make test-setup | Install Playwright Chromium (make setup first) |
make test | Playwright + Eyes (needs APPLITOOLS_API_KEY) |
make build-local-packages | Rebuild pack/ only |
make clean-local-packages | Remove pack/ |
make teardown | Remove pack/ and node_modules |
make build | Production Vite build (after setup) |
make preview | vite preview |
Quick start
export APPLITOOLS_API_KEY='...'
make teardown setup dev
Troubleshooting
- Eyes / auth errors: Confirm
APPLITOOLS_API_KEYis set in the shell running Playwright. - Module not found:
make clean-local-packages && make setup - Playwright failures:
make test-setup; avoid port 5173 conflicts when CI setsreuseExistingServerfalse.
Notes
- The demo loads English strings for the
protocol_visualizationi18n namespace fromsrc/locale/en/protocol_visualization.json(kept in sync withapp/src/assets/localization/en/protocol_visualization.json). - Tests consume the packed artifacts under
pack/, not live monorepo source, until you rebuild.