Security News
JSR Working Group Kicks Off with Ambitious Roadmap and Plans for Open Governance
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
@cypress/skip-test
Advanced tools
Simple commands to skip a test based on platform, browser or an url
it('skips this test when running on Mac', () => {
cy.log('about to run custom command to skip this test')
.wait(1000)
.skipOn('mac')
})
This is a simple utility plugin until Cypress supports filtering of tests.
npm install -D @cypress/skip-test
You can use this module as custom Cypress commands cy.skipOn
and cy.onlyOn
or by importing its functions. To use custom commands like cy.skipOn
, add this module to your support file cypress/support/index.js
require('@cypress/skip-test/support')
cy.skipOn
Skip this test if running in Electron browser
it('only runs on Electron', () => {
cy.skipOn('electron')
// the rest of the test
})
Skip this test if running on Windows platform
it('runs on Linux and Mac', () => {
cy.skipOn('windows')
// the rest of the test
})
cy.onlyOn
Continues the test only when running on Mac, skips when running on any other platform
it('runs on Mac only', () => {
cy.onlyOn('mac')
// the rest of the test
})
Continues this test only when running against localhost
. Use baseUrl
to set the url to compare.
it('only tests localhost', () => {
cy.onlyOn('localhost')
// the rest of the test
})
import { onlyOn, skipOn } from '@cypress/skip-test'
it('runs only on Mac', () => {
// using the exported function instead of
// the custom command cy.onlyOn(...)
onlyOn('mac')
})
it('skips on Mac', () => {
skipOn('darwin')
})
Instead of dynamically skipping a test at run-time, you can hide entire blocks of tests using the callback format.
import { onlyOn, skipOn } from '@cypress/skip-test'
onlyOn('mac', () => {
// this callback will only evaluate on Mac
// thus the tests will be completely hidden from other platforms
describe('Mac tests', () => {
it('works', () => {})
})
})
skipOn('mac', () => {
// this test will run on every platform but Mac
it('hides this test on Mac', () => {})
})
Tip: you can nest the callbacks to combine the conditions
// run these group of tests only on Mac and only on Chrome
onlyOn('mac', () => {
onlyOn('chrome', () => {
it('works', () => {})
})
})
You can pass a boolean to each function or command if you want to calculate when to run the tests yourself.
// run this test if S is "foo"
cy.onlyOn(S === 'foo')
You can use callback form with the flag
onlyOn(S === 'foo', () => {
describe('foo', () => {
it('works', () => {...})
})
})
You can even run other Cypress commands before deciding to skip or continue
it('runs if task returns production', () => {
cy.task('getDbName').then(name => cy.onlyOn(name === 'production'))
// equivalent
cy.task('getDbName').then(name => onlyOn(name === 'production'))
// equivalent
cy.task('getDbName')
.then(name => name === 'production')
.then(onlyOn)
})
isOn
You can check the condition against a browser name or an environment yourself.
import { isOn } from '@cypress/skip-test'
it('loads users', () => {
// when running on Windows locally, the backend is not running
// thus we need to stub XHR requests
if (isOn('windows') && isOn('localhost')) {
cy.server()
cy.route('/users', 'fixture:users')
}
cy.visit('/')
cy.get('.user').should('have.length', 10)
})
ENVIRONMENT
This module also reads special environment variable ENVIRONMENT
inside its checks. For example, to only stub network calls on staging
environment, execute the tests like this:
CYPRESS_ENVIRONMENT=staging npx cypress run
Inside the spec file you can write
import {onlyOn} from '@cypress/skip-test'
const stubServer = () => {
cy.server()
cy.route('/api/me', 'fx:me.json')
cy.route('/api/permissions', 'fx:permissions.json')
// Lots of fixtures ...
}
it('works', () => {
onlyOn('staging', stubServer)
...
})
The test works
will stub network calls when running on staging
, but will skip calling stubServer
for other environments.
You can chain conditions together
it('combination of skip and only', () => {
cy.skipOn('firefox')
cy.onlyOn('electron').onlyOn('mac')
cy.log('running test')
})
If the test runs, it will print the conditions in the command log
To get typings, reference this module, for example by using reference
comment
/// <reference types="@cypress/skip-test" />
For more details read Cypress Intelligent Completion Guide
Skipping tests in Mocha at run-time skips the afterEach
hooks. In this example, afterEach
will be skipped, and after
hook will run.
it('example', () => {
cy.skipOn('mac')
})
afterEach(() => {
// this will be skipped when a test is skipped
})
after(() => {
// this will run even after skipping test
})
FAQs
Simple commands to skip a test based on platform, browser or an url
We found that @cypress/skip-test demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
Security News
Research
An advanced npm supply chain attack is leveraging Ethereum smart contracts for decentralized, persistent malware control, evading traditional defenses.
Security News
Research
Attackers are impersonating Sindre Sorhus on npm with a fake 'chalk-node' package containing a malicious backdoor to compromise developers' projects.