* commit previous changes made by @bahmutov for #1573 * Pass '--run-from-cli' flag through ping test in order to prevent warning from printing * woops, require 'argsUntil' * 'headed' was changed to 'interactiveMode' * fix duplicate misspelled require * tighten up args utils and cleanup decaf garbage * cleanup errors.log to take a cb and conditionally be async * remove extraneous --run-from-cli argument, consolidate to use --cli - update tests * fixes tests, ensure that record.createRun() always returns a promise * refactor tests to handle new errors.logException interface * make logException always return a promise, cleanup interface, add test * fix linting errors Co-authored-by: Brian Mann <brian.mann86@gmail.com>
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 desktop-gui 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.
Installing
The server's dependencies can be installed with:
cd packages/server
npm install
Developing
To run Cypress:
npm start ## boots the entire Cypress application
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.
Testing
npm run test-unitexecutes unit tests intest/unitnpm run test-integrationexecutes integration tests intest/integrationnpm run test-e2eexecutes the large (slow) end to end tests intest/e2e
Each of these tasks can run in "watch" mode by appending -watch to the task:
npm run test-unit-watch
Because of the large number of dependencies of the server, it's much more performant to run a single individual test.
## runs only this one test file
npm run test ./test/unit/api_spec.coffee
## works for integration tests too
npm run test ./test/integration/server_spec.coffee
You can also run a single test in watch mode.
## runs and watches only this one test file
npm run test-watch ./test/unit/api_spec.coffee
To run an individual e2e test:
## runs tests that match "base_url"
npm run test-e2e -- --spec base_url
To update snapshots, see snap-shot-it instructions: https://github.com/bahmutov/snap-shot-it#advanced-use