Docs Command Do Not Continue Until

exec

Execute a system command.

Syntax

                cy.                  exec                  (command)                  cy.                  exec                  (command,                  options)                              

Usage

Correct Usage

Arguments

command (String)

The system command to be executed from the project root (the directory that contains the Cypress configuration file).

options (Object)

Pass in an options object to change the default behavior of cy.exec().

Option Default Description
log true Displays the command in the Command log
env {} Object of environment variables to set before the command executes (e.g. {USERNAME: 'johndoe'}). Will be merged with existing system environment variables
failOnNonZeroExit true whether to fail if the command exits with a non-zero code
timeout execTimeout Time to wait for cy.exec() to resolve before timing out

Yields

cy.exec() yields an object with the following properties:

  • code
  • stdout
  • stderr

Examples

Command

cy.exec() provides an escape hatch for running arbitrary system commands, so you can take actions necessary for your test outside the scope of Cypress. This is great for:

  • Running build scripts
  • Seeding your test database
  • Starting processes
  • Killing processes

Run a build command

                cy.                  exec                  (                  'npm run build'                  )                  .                  then                  (                  (                  result                  )                  =>                  {                  // yields the 'result' object                  // {                  //   code: 0,                  //   stdout: "Files successfully built",                  //   stderr: ""                  // }                  }                  )                              

Seed the database and assert it was successful

                cy.                  exec                  (                  'rake db:seed'                  )                  .                  its                  (                  'code'                  )                  .                  should                  (                  'eq'                  ,                  0                  )                              

Run an arbitrary script and assert its output

                cy.                  exec                  (                  'npm run my-script'                  )                  .                  its                  (                  'stdout'                  )                  .                  should                  (                  'contain'                  ,                  'Done running the script'                  )                              

Write to a file to create a fixture from response body

                cy.                  intercept                  (                  'POST'                  ,                  '/comments'                  )                  .                  as                  (                  'postComment'                  )                  cy.                  get                  (                  '.add-comment'                  )                  .                  click                  (                  )                  cy.                  wait                  (                  '@postComment'                  )                  .                  then                  (                  (                                      {                    response                    }                                    )                  =>                  {                  cy.                  exec                  (                                      `                    echo                                                              ${                      JSON                      .                      stringify                      (response.                      body                      )                      }                                                              >cypress/fixtures/comment.json                    `                                    )                  cy.                  fixture                  (                  'comment.json'                  )                  .                  should                  (                  'deep.eq'                  ,                  response.                  body                  )                  }                  )                              

Options

Change the timeout

You can increase the time allowed to execute the command, although we don't recommend executing commands that take a long time to exit.

Cypress will not continue running any other commands until cy.exec() has finished, so a long-running command will drastically slow down your test cycle.

                                  // will fail if script takes longer than 20 seconds to finish                  cy.                  exec                  (                  'npm run build'                  ,                  {                  timeout                  :                  20000                  }                  )                              

Choose to not fail on non-zero exit and assert on code and stderr

                cy.                  exec                  (                  'man bear pig'                  ,                  {                  failOnNonZeroExit                  :                  false                  }                  )                  .                  then                  (                  (                  result                  )                  =>                  {                  expect                  (result.                  code                  )                  .                  to                  .                  eq                  (                  1                  )                  expect                  (result.                  stderr                  )                  .                  to                  .                  contain                  (                  'No manual entry for bear'                  )                  }                  )                              

Specify environment variables

                cy.                  exec                  (                  'echo $USERNAME'                  ,                  {                  env                  :                  {                  USERNAME                  :                  'johndoe'                  }                  }                  )                  .                  its                  (                  'stdout'                  )                  .                  should                  (                  'contain'                  ,                  'johndoe'                  )                              

Notes

Commands Must Exit

Commands that do not exit are not supported

cy.exec() does not support commands that don't exit, such as:

  • Starting a rails server
  • A task that runs a watch
  • Any process that needs to be manually interrupted to stop

A command must exit within the execTimeout or Cypress will kill the command's process and fail the current test.

Reset timeout via Cypress.config()

You can change the timeout of cy.exec() for the remainder of the tests by setting the new values for execTimeout within Cypress.config().

                                  Cypress                  .                  config                  (                  'execTimeout'                  ,                  30000                  )                  Cypress                  .                  config                  (                  'execTimeout'                  )                  // => 30000                              

Set timeout in the test configuration

You can configure the cy.exec() timeout within a suite or test by passing the new configuration value within the test configuration.

This will set the timeout throughout the duration of the tests, then return it to the default execTimeout when complete.

                                  describe                  (                  'has data available from database'                  ,                  {                  execTimeout                  :                  90000                  }                  ,                  (                  )                  =>                  {                  before                  (                  (                  )                  =>                  {                  cy.                  exec                  (                  'rake db:seed'                  )                  }                  )                  // tests                  after                  (                  (                  )                  =>                  {                  cy.                  exec                  (                  'rake db:reset'                  )                  }                  )                  }                  )                              

Rules

Requirements

  • cy.exec() requires being chained off of cy .
  • cy.exec() requires the executed system command to eventually exit.
  • cy.exec() requires that the exit code be 0 when failOnNonZeroExit is true .

Assertions

  • cy.exec() will only run assertions you have chained once, and will not retry .

Timeouts

  • cy.exec() can time out waiting for the system command to exist.

Command Log

List the contents of your package.json file

                                  if                  (                  Cypress                  .                  platform                  ===                  'win32'                  )                  {                  cy.                  exec                  (                  'print package.json'                  )                  .                  its                  (                  'stderr'                  )                  .                  should                  (                  'be.empty'                  )                  }                  else                  {                  cy.                  exec                  (                  'cat package.json'                  )                  .                  its                  (                  'stderr'                  )                  .                  should                  (                  'be.empty'                  )                  }                              

The command above will display in the Command Log as:

Command Log exec

When clicking on the exec command within the command log, the console outputs the following:

console.log exec

See also

  • cy.readFile()
  • cy.request()
  • cy.task()
  • cy.writeFile()

turnerwhorraing.blogspot.com

Source: https://docs.cypress.io/api/commands/exec

0 Response to "Docs Command Do Not Continue Until"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel