get
and set
environment variables in your tests.
The Environment Variable guide explains the other ways you can set them outside of your tests.
ScopeEnvironment variables set using
Cypress.env
are only in scope for the current spec file.Cypress runs each spec file in isolation: the browser is exited between specs. Environment variables added or changed in one spec won’t be visible in other specs.
Syntax
Cypress.env() Cypress.env(name) Cypress.env(name, value) Cypress.env(object)
Arguments
name (String)
The name of the environment variable to get or set.
value (String)
The value of the environment variable to set.
object (Object)
Set multiple environment variables with an object literal.
Examples
No Arguments
Get all environment variables.
// cypress.json { "env": { "foo": "bar", "baz": "quux" } }
Cypress.env() // => {foo: "bar", baz: "quux"}
Name
Return a single environment variable value.
// cypress.json { "env": { "foo": "bar", "baz": "quux" } }
Cypress.env('foo') // => bar Cypress.env('baz') // => quux
Name and Value
Cypress allows you to change the values of your environment variables from within your tests.
ScopeRemember, any changes that you make to environment variables using this API will only be in effect for the remainder of the tests in the same spec file.
// cypress.json { "env": { "foo": "bar", "baz": "quux" } }
Cypress.env('host', 'http://server.dev.local') Cypress.env('host') // => http://server.dev.local
Object
You can set multiple values by passing an object literal.
// cypress.json { "env": { "foo": "bar", "baz": "quux" } }
Cypress.env({ host: 'http://server.dev.local', foo: 'foo' }) Cypress.env() // => {foo: "foo", baz: "quux", host: "http://server.dev.local"}
From a plugin
Here’s an example that uses Cypress.env
to access an environment variable that’s been dynamically set in a plugin.
Use this approach to grab the value of an environment variable once before any of the tests in your spec run.
// cypress/plugins/index.js module.exports = (on, config) => { config.env.sharedSecret = process.env.NODE_ENV === 'qa' ? 'hoop brick tort' : 'sushi cup lemon' return config }
// cypress/integration/secrets_spec.js describe('Environment variable set in plugin', () => { let sharedSecret before(() => { sharedSecret = Cypress.env('sharedSecret') }) it.only('can be accessed within test.', () => { cy.log(sharedSecret) }) })
Notes
Why would I ever need to use environment variables?
The Environment Variables guide explains common use cases.
Can I pass in environment variables from the command line?
Yes. You can do that and much more.
The Environment Variables guide explains the other ways you can set environment variables for your tests.
Why is it Cypress.env
and not cy.env
?
As a rule of thumb anything you call from Cypress
affects global state. Anything you call from cy
affects local state.
Since the environment variables added or changed by Cypress.env
are only in scope for the current spec file, you’d think that it should be cy.env
and not Cypress.env
… and you’d be right. The fact that Cypress.env
affects local state is an artifact of the API evolving over time: Cypress.env
used to affect global state—environment variables added in one test spec file were available in other specs—but the Cypress team wisely made each spec run in isolation in 3.0.0
and by that time Cypress.env
was public API.
See also
- The Environment Variable guide
- configuration