js-package-testing

star 504

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.

Opentrons By Opentrons schedule Updated 4/27/2026

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_KEY via .env in js-package-testing/ (loaded by import 'dotenv/config' in playwright.config.ts) or export it in the shell (see js-package-testing/.env.example).
  • App name in Eyes: js-package-testing (playwright.config.tsuse.eyesConfig.appName).
  • Import test from @applitools/eyes-playwright/fixture in specs; use eyes.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_KEY is 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 sets reuseExistingServer false.

Notes

  • The demo loads English strings for the protocol_visualization i18n namespace from src/locale/en/protocol_visualization.json (kept in sync with app/src/assets/localization/en/protocol_visualization.json).
  • Tests consume the packed artifacts under pack/, not live monorepo source, until you rebuild.
Install via CLI
npx skills add https://github.com/Opentrons/opentrons --skill js-package-testing
Repository Details
star Stars 504
call_split Forks 204
navigation Branch main
article Path SKILL.md
More from Creator