Files
cypress/cli
Cacie Prins 6b9f27c95d dependency: electron@36.4.0 (#31912)
* dependency: update Electron to 34

* setup workflows to run against binary branch and on all tests

* changelog entry

* node version did bump minorly

* Update base-internal image to match new node version

* fix typo

* changelog updates

* bumping to newest version just released today - hopefully solves glibc error

* fix cy in cy

* remove extra register_ts_node require

* updated lockfile

* upgrade better-sqlite3

* changelog

* update electron in top level package.json

* ts issue, update to use binary workflow for e35, update ancillary deps

* update gh issue templates

* bump missed image names and engines field

* node 22

* snapgen?

* ts issue, log errors even if err.stderr/stdout is null

* more logging

* defer http-proxy common.js due to regexp issue in v8 13.4.* - 13.8.91

* update images for node 22.15.1, use bullseye instead of buster for bettersqlite

* use bullseye image for glibc2.31 build of bettersqlite

* use electron-36 publish binary branch

* node-abi update, set http-proxy deferred in darwin

* update .node-version

* attempt to patch http-proxy to immediately defer  http-proxy/lib/http-proxy/common.js

* empty commit [run ci]

* better patch?

* changelog

* changelog

* Updates v8 snapshots to fix windows build (#31918)

* use node 22 in the v8 snapshot update workflow

* index on windows-v8-snapshots: a013464197 use node 22 in the v8 snapshot update workflow

* index on windows-v8-snapshots: a013464197 use node 22 in the v8 snapshot update workflow

* index on windows-v8-snapshots: a013464197 use node 22 in the v8 snapshot update workflow

* run workflows on windows/mac

---------

Co-authored-by: cypress-bot[bot] <+cypress-bot[bot]@users.noreply.github.com>

* update protocol system test snapshots (#31925)

* use snapshot to verify the error message on invalid json (#31926)

* chore: account for all node: internal stacks when trying to calculate the code frame. Accounts additionally for node:diagnostics_channel (#31935)

* Fixes electron 36 integrity checks (#31956)

* update the fs.readFileSync integrity check expectation

* maybe this fn is missing from the expected stack?

* more debug, change the stack up a little

* actual fn name is traceSync

* logging

* logging

* remove logging from integrity check

* maybe circle api changed?

* correct params

* inspect stack frames for differences

* have to manually serialize the stack frames

* change expectation

* update expected global keys

* additional allow list

* update key allow list

* increase zipfile size limit on non-windows builds

* revert logging changes

* Update scripts/binary/binary-integrity-check-source.js

* increase timeout to 120s for darwin fsevents/native module test (#31975)

* print out stdout for darwin test

* try and fix test

* update readme re: browsers-internal images, ensure module_api_spec binary test uses correct electron version

* Update .circleci/workflows.yml

Co-authored-by: Bill Glesias <bglesias@gmail.com>

* Update .circleci/workflows.yml

Co-authored-by: Bill Glesias <bglesias@gmail.com>

* trigger 15.0.0 binary pipeline rather than electron-36 specific one

* Update cli/CHANGELOG.md

Co-authored-by: Bill Glesias <bglesias@gmail.com>

* Update cli/CHANGELOG.md

---------

Co-authored-by: Jennifer Shehane <jennifer@cypress.io>
Co-authored-by: Ryan Manuel <ryanm@cypress.io>
Co-authored-by: Jennifer Shehane <shehane.jennifer@gmail.com>
Co-authored-by: cypress-bot[bot] <+cypress-bot[bot]@users.noreply.github.com>
Co-authored-by: Bill Glesias <bglesias@gmail.com>
2025-07-07 13:03:13 -04:00
..
2022-12-29 17:26:13 +00:00

CLI

The CLI is used to build the cypress npm module to be run within a terminal.

The CLI has the following responsibilities:

  • Allow users to print CLI commands
  • Allow users to install the Cypress executable
  • Allow users to print their current Cypress version
  • Allow users to run Cypress tests from the terminal
  • Allow users to open Cypress in the interactive Test Runner.
  • Allow users to verify that Cypress is installed correctly and executable
  • Allow users to manages the Cypress binary cache
  • Allow users to pass in options that change way tests are ran or recorded (browsers used, specfiles ran, grouping, parallelization)

Building

See scripts/build.js. Note that the built npm package will include NPM_README.md as its public README file.

Testing

Automated

From the repo's root, you can run unit tests with:

yarn test-unit --scope cypress
yarn test-watch --scope cypress
yarn test-debug --scope cypress

Updating snapshots

Prepend SNAPSHOT_UPDATE=1 to any test command. See snap-shot-it instructions for more info.

SNAPSHOT_UPDATE=1 yarn test-unit --scope cypress

Type Linting

When testing with dtslint, you may need to remove existing typescript installations before running the type linter (for instance, on OS X, you might rm -rf ~/.dts/typescript-installs) in order to reproduce issues with new versions of typescript (i.e., @next).

Manual

To build and test an npm package, execute the following from the repo's root directory:

yarn
yarn build

This creates the cli/build folder.

cd cli/build
yarn pack

This creates an archive, usually named cypress-v<version>.tgz. You can install this archive from other projects, but because there is no corresponding binary yet (probably), skip binary download. For example from inside cypress-example-kitchensink folder

yarn add ~/{your-dirs}/cypress/cli/build/cypress-v13.13.2.tgz --ignore-scripts

Sub-package API

How do deep imports from cypress/* get resolved?

The cypress npm package comes pre-assembled with mounting libraries for major front-end frameworks. These mounting libraries are the first examples of Cypress providing re-exported sub-packages. These sub-packages follow the same naming convention they do when they're published on npm, but without a leading @ sign. For example:

An example of a sub-package: @cypress/vue, @cypress/react, @cypress/mount-utils

Let's discuss the Vue mounting library that Cypress ships.

If you'd installed the @cypress/vue package from NPM, you could write the following code.

This would be necessary when trying to use a version of Vue, React, or other library that may be newer or older than the current version of cypress itself.

import { mount } from '@cypress/vue'

Now, with the sub-package API, you're able to import the latest APIs directly from Cypress without needing to install a separate dependency.

import { mount } from 'cypress/vue'

The only difference is the import name, and if you still need to use a specific version of one of our external sub-packages, you may install it and import it directly.

Adding a new sub-package

There are a few steps when adding a new sub-package.

  1. Make sure the sub-package's rollup build is self-contained or that any dependencies are also declared in the CLI's package.json.
  2. Now, in the postbuild script for the sub-package you'd like to embed, invoke node ./scripts/sync-exported-npm-with-cli.js (relative to the sub-package, see npm/vue for an example).
  3. Add the sub-package's name to the following locations:
  • cli/.gitignore
  • cli/scripts/post-build.js
  • .eslintignore (under cli/sub-package)
  1. DO NOT manually update the package.json file. Running yarn build will automate this process.
  2. Commit the changed files.

Here is an example Pull Request

Module API

The module API can be tested locally using something like:

/* @ts-ignore */
import cypress from '../../cli/lib/cypress'

const run = cypress.run as (options?: Partial<CypressCommandLine.CypressRunOptions>) => Promise<CypressCommandLine.CypressRunResult | CypressCommandLine.CypressFailedRunResult>

run({
  spec: './cypress/component/advanced/framer-motion/Motion.spec.tsx',
  testingType: 'component',
  /* @ts-ignore */
  dev: true,
}).then(results => {
  console.log(results)
})

Note that the dev flag is required for local testing, as otherwise the command will fail with a binary error.