* tbd * workable templated filestream uploader * clean up async assertions * upload stream uses activity monitor to detect start timeouts and stalls * makes uploadStream retryable * filesize detection, enoent errors, and testable retry delays * extract fs logic to putProtocolArtifact, impl putProtocolArtifact * aggregate errors for retryable upload streams * fixes imports from moving api.ts, uses new upload mechanism in protocol.ts * use spec_helper in StreamActivityMonitor_spec due to global sinon clock changes * fix putProtocolArtifact specs when run as a part of the unit test suite * fix return type of ProtocolManager.uploadCaptureArtifact * convert from whatwg streams back to node streams * extract HttpError * ensure system test snapshots * changelog * more changelog * fix unit tests * fix api ref in integration test * fix refs to api in snapshotting and after-pack * small edits * Update packages/server/lib/cloud/api/HttpError.ts Co-authored-by: Bill Glesias <bglesias@gmail.com> * Update packages/server/lib/cloud/upload/uploadStream.ts Co-authored-by: Bill Glesias <bglesias@gmail.com> * camelcase -> snakeCase filenames * improve docs for StreamActivityMonitor * added documentation to: upload_stream, put_protocol_artifact_spec * move stream activity monitor params to consts - no magic numbers. docs. * Update packages/server/lib/cloud/api/http_error.ts Co-authored-by: Bill Glesias <bglesias@gmail.com> * Update packages/server/test/unit/cloud/api/put_protocol_artifact_spec.ts Co-authored-by: Bill Glesias <bglesias@gmail.com> * fix check-ts * fix imports in put_protocol_artifact_spec * Update packages/server/test/unit/cloud/upload/stream_activity_monitor_spec.ts Co-authored-by: Ryan Manuel <ryanm@cypress.io> * api.ts -> index.ts * fix comment style, remove confusingly inapplicable comment about whatwg streams --------- Co-authored-by: Bill Glesias <bglesias@gmail.com> Co-authored-by: Ryan Manuel <ryanm@cypress.io>
Server
The server is the heart of the Cypress application. All of this code represents the node process running behind the browser application. This node process is responsible for:
- Proxying every byte coming in and out of the browser
- Performing and normalizing automation tasks for each browser
- Coordinating and synchronizing state with the launchpad and driver packages
- Performing node specific tasks on behalf of the driver
- Instantiating and orchestrating nearly every other layer and package
- Spinning up various static file and http servers
- Communicating with our external API's
- Recording videos of run
- Managing mocha reporters
- Managing 3rd party plugins
The driver and the server are the two most complex packages of Cypress.
Developing
To run the Cypress server:
## boots the entire Cypress application
yarn start
Since the server controls nearly every aspect of Cypress, after making changes you'll need to manually restart Cypress.
Since this is slow, it's better to drive your development with tests.
Building
Note: you should not ever need to build the .js files manually. @packages/ts provides require-time transpilation when in development.
yarn workspace @packages/server build-prod
yarn test-unitexecutes unit tests intest/unityarn test-integrationexecutes integration tests intest/integrationyarn test-performanceexecutes performance tests intest/performance
You can also use the test-watch command to rerun a test file whenever there is a change:
yarn test-watch /test/path/to/spec.js
Running individual unit tests
yarn test <path/to/test>
yarn test test/unit/api_spec.js
## or
yarn test-unit api_spec ## shorthand, uses globbing to find spec
Running individual integration tests
yarn test <path/to/test>
yarn test test/integration/cli_spec.js
## or
yarn test-integration cli_spec ## shorthand, uses globbing to find spec
Running e2e/system tests
With the addition of Component Testing,
e2etests have been renamed tosystem-testsand moved to thesystem-testsdirectory.
Updating snapshots
Prepend SNAPSHOT_UPDATE=1 to any test command. See snap-shot-it instructions for more info.
SNAPSHOT_UPDATE=1 yarn test test/unit/api_spec.js
SNAPSHOT_UPDATE=1 yarn test test/integration/cli_spec.js
V8 Snapshots
In order to improve start up time, Cypress uses electron mksnapshot for generating v8 snapshots for both development and production.
Cypress code is automatically set up to run using snapshots. If you want to run Cypress in development without the v8 snapshot (for debugging purposes or to see if there's a problem with the snapshot or the code itself) you can set the environment variable DISABLE_SNAPSHOT_REQUIRE to 1 or true.