* feat: Commands.addSelector, and migrate .get() to be a selector
* Fix for failed tests
* Last test fix
* More test fixes
* Self review changes
* Remove the concept of prevSubject from selectors entirely
* Rename addSelector to addQuery
* Quick fix for last commit
* Fix TS
* Fix merge from develop
* Add types and other review updates
* Increase timeout to try fixing flakiness
* Rename addQuery to _addQuery
* Fix typo in previous commit
* Fix TS
* Include AUT assertion in cy.get()
* Fix for previous commit
* Review feedback
* Minor test improvement
* Swifter failure on sizzle syntax error
* Better solution for refetching current subject in verifyUpcomingAssertions
* Command IDs now include their chainerId
* Revert "chore: Revert "feat: _addQuery() (#23665)" (#24022)"
This reverts commit f399994e9f.
* feat: move .contains() and .shadow() to be queries; remove cy.ng() (#23791)
* First stab at removing old .get() implementation
* Fix TS and a couple of tests
* Fix tests and TS
* Fix case-sensitivity for .contains()
* Stop TS complaining
* Rework cy-contains jquery expression
* Add comments, make ts happy
* Fix one test, review feedback
* Review updates
* Fix additional tests
* Fix accidental deletion of vital code
* One more try at getting logs right
* Fix race condition in cross-origin .contains
* Add commented out test to ensure .within() works properly with selectors
* Fix for sessions + query subject chaining
* Fix mixing .within() shadow DOM and .contains() in same chainer
* One more attempt at .within + .contains
* Fix rebase commits
* feat: addQuery Remaining Queries (#24203)
* First stab at removing old .get() implementation
* Fix TS and a couple of tests
* Fix tests and TS
* Fix case-sensitivity for .contains()
* Stop TS complaining
* Rework cy-contains jquery expression
* Add comments, make ts happy
* Fix one test, review feedback
* Review updates
* Fix additional tests
* Fix accidental deletion of vital code
* One more try at getting logs right
* Fix race condition in cross-origin .contains
* Add commented out test to ensure .within() works properly with selectors
* Fix for sessions + query subject chaining
* Fix mixing .within() shadow DOM and .contains() in same chainer
* One more attempt at .within + .contains
* Fix rebase commits
* Update many commands to be queries; improve log message around invalid subjects
* Update connectors, location, focused and window commands to queries
* Return noop to a command and not a query (to avoid implicit assertions)
* More test fixes
* Fix test failures
* Fix for weird-ass frontend-component test
* Error message improvements
* Fix for broken system test
* Update withinSubject to use subject chain
* Test clarifications
* Unbreak cypress-testing-library via withinState backwards compatibility
* Typo in last commit
* Improvement for assertion following failed traversal
* feat: Fix detached DOM errors for all Cypress commands (#24417)
* First stab at removing old .get() implementation
* Fix TS and a couple of tests
* Fix tests and TS
* Fix case-sensitivity for .contains()
* Stop TS complaining
* Rework cy-contains jquery expression
* Add comments, make ts happy
* Fix one test, review feedback
* Review updates
* Fix additional tests
* Fix accidental deletion of vital code
* One more try at getting logs right
* Fix race condition in cross-origin .contains
* Add commented out test to ensure .within() works properly with selectors
* Fix for sessions + query subject chaining
* Fix mixing .within() shadow DOM and .contains() in same chainer
* One more attempt at .within + .contains
* Fix rebase commits
* Update many commands to be queries; improve log message around invalid subjects
* Update connectors, location, focused and window commands to queries
* Return noop to a command and not a query (to avoid implicit assertions)
* More test fixes
* Fix test failures
* Fix for weird-ass frontend-component test
* Error message improvements
* Fix for broken system test
* Update withinSubject to use subject chain
* Test clarifications
* Unbreak cypress-testing-library via withinState backwards compatibility
* Typo in last commit
* Improvement for assertion following failed traversal
* WIP adding query support to
* More work on actionability + detached dom
* Fix TS, rename _addQuery to addQuery
* Another try to fix types
* Fix lint
* Fix for bad merge
* Fixes for a couple more tests
* Increase timeout 50ms -> 100ms on certain tests failing in CI
* Switch to new branch of cypress-testing-library
* Update lockfile
* Fix yarn.lock with latest version of forked testing-library
* More test fixes
* Fix TS again
* Increase test assertion timeout so it passes on slow browsers (webkit)
* Apply suggestions from code review
Co-authored-by: Emily Rohrbough <emilyrohrbough@users.noreply.github.com>
Co-authored-by: Zach Bloomquist <git@chary.us>
* More review changes
* Fix selectFile tests based on updated error message
* Improve types and type comments for Commands.add
* Undo change to Commands.add types
* Update yarn lockfiles again
* Remove overwriteQuery from Cy12; .focused() now respects passed in timeout
* Update cli/types/cypress.d.ts
Co-authored-by: Chris Breiding <chrisbreiding@users.noreply.github.com>
* Restore .uncheck() tests
Co-authored-by: Emily Rohrbough <emilyrohrbough@users.noreply.github.com>
Co-authored-by: Zach Bloomquist <git@chary.us>
Co-authored-by: Chris Breiding <chrisbreiding@users.noreply.github.com>
* Fix for hanging driver test after merge
* Fix for app component test
Co-authored-by: Emily Rohrbough <emilyrohrbough@users.noreply.github.com>
Co-authored-by: Zach Bloomquist <git@chary.us>
Co-authored-by: Chris Breiding <chrisbreiding@users.noreply.github.com>
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:
yarnyarn build
This creates build folder.
cd 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-3.3.1.tgz --ignore-scripts
Which installs the tgz file we have just built from folder Users/jane-lane/{your-dirs}/cypress/cli/build.
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.
- Make sure the sub-package's rollup build is self-contained or that any dependencies are also declared in the CLI's
package.json. - Now, in the
postbuildscript for the sub-package you'd like to embed, invokenode ./scripts/sync-exported-npm-with-cli.js(relative to the sub-package, seenpm/vuefor an example). - Add the sub-package's name to the following locations:
cli/.gitignorecli/scripts/post-build.js.eslintignore(under cli/sub-package)
- DO NOT manually update the package.json file. Running
yarn buildwill automate this process. - 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.