Environment selection
Some tests are designed to be run against specific environments. We can specify
what environments to run tests against using the only metadata.
Available switches
| Switch | Function | Type |
|---|---|---|
tld
| Set the top-level domain matcher | String
|
subdomain
| Set the subdomain matcher |
Array or String
|
domain
| Set the domain matcher | String
|
production
| Match against production | Static
|
:production and { <switch>: 'value' } simultaneously.These options are mutually exclusive. If you want to specify production, you can control the
tld and domain independently.Examples
| Environment | Key | Matches (regex) |
|---|---|---|
any
| `` | .+.com
|
gitlab.com
| only: :production
| gitlab.com
|
staging.gitlab.com
| only: { subdomain: :staging }
| (staging).+.com
|
gitlab.com and staging.gitlab.com
| only: { subdomain: /(staging.)?/, domain: 'gitlab' }
| (staging.)?gitlab.com
|
dev.gitlab.org
| only: { tld: '.org', domain: 'gitlab', subdomain: 'dev' }
| (dev).gitlab.org
|
staging.gitlab.com & domain.gitlab.com
| only: { subdomain: %i[staging domain] }
| (staging|domain).+.com
|
RSpec.describe 'Area' do
it 'runs in any environment' do; end
it 'runs only in production', only: :production do; end
it 'runs only in staging', only: { subdomain: :staging } do; end
it 'runs in dev', only: { tld: '.org', domain: 'gitlab', subdomain: 'dev' } do; end
it 'runs in prod and staging', only: { subdomain: /(staging.)?/, domain: 'gitlab' } {}
end
before or after, you must add the only metadata
to the outer RSpec.describe.Quarantining a test for a specific environment
Similarly to specifying that a test should only run against a specific environment, it’s also possible to quarantine a
test only when it runs against a specific environment. The syntax is exactly the same, except that the only: { ... }
hash is nested in the quarantine: { ... } hash.
For instance, quarantine: { only: { subdomain: :staging } } will only quarantine the test when run against staging.