Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/scottrippey/cypress-try-or-skip
Easy conditional testing with Cypress. If a command fails, skip the test.
https://github.com/scottrippey/cypress-try-or-skip
cypress cypress-command cypress-plugin cypress-tests testing
Last synced: about 1 month ago
JSON representation
Easy conditional testing with Cypress. If a command fails, skip the test.
- Host: GitHub
- URL: https://github.com/scottrippey/cypress-try-or-skip
- Owner: scottrippey
- Created: 2023-02-26T13:57:13.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2023-03-03T19:15:19.000Z (almost 2 years ago)
- Last Synced: 2024-11-19T01:27:11.687Z (about 2 months ago)
- Topics: cypress, cypress-command, cypress-plugin, cypress-tests, testing
- Language: JavaScript
- Homepage:
- Size: 262 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# cypress-try-or-skip
Easy conditional testing with Cypress. If a command fails, skip the test.# Motivation
In an ideal world, E2E tests have control over external dependencies, and there is no need for **conditional testing**.
Unfortunately, in practice, external dependencies are hard to control, and E2E tests will be brittle and flaky if they can't adapt.
`cypress-try-or-skip` enables easy conditional testing by skipping tests when a command (or assertion) fails.
# Installation
Install the module as a `devDependency` via `npm install --save-dev cypress-try-or-skip`
And in your `cypress/support/index.js` file, import the module:
```js
import 'cypress-try-or-skip`;
```# Usage
## `cy.tryOrSkip(commands: () => void)`
In any test, wrap some Cypress commands with `cy.tryOrSkip(() => { ... })`.
If any of these commands fail, the test will be marked as **skipped**, not **failed**!### Example: usage in a `it` block
In this example, if `#feature-a` does not exist, then the test will stop executing, and be marked as **skipped**.
```js
it("if FEATURE A is enabled, clicking the button will open a modal", () => {
cy.tryOrSkip(() => {
cy.get("#feature-a").should("exist");
});
cy.get("#feature-a-button").click();
cy.get("#feature-a-modal").should("be.visible");
});
```### Example: usage in a `before` block
If used inside a `before` block, the **entire suite** (everything inside the `describe` block) will be skipped if the command fails.
```js
describe("if FEATURE A is enabled", () => {
before(() => {
cy.tryOrSkip(() => {
cy.get("#feature-a").should("exist");
});
});
it("the feature-a button will be visible", () => {
cy.get("#feature-a-button").should("be.visible");
});
it("clicking the feature-a button will open a modal", () => {
cy.get("#feature-a-button").click();
cy.get("#feature-a-modal").should("be.visible");
});
});
```If `#feature-a` does not exist, both of the tests in the `describe` block will be marked as "skipped".
# Configuration
These settings can be configured in your `cypress.config.json` or can be supplied to the config option of `describe` or `it`.
### `tryOrSkipBehavior: 'skip' | 'fail'`
`skip` (default)
By default, a failed command means the test will be marked as "skipped", which means the test suite will still pass.
This works well in certain workflows, like Pull Request checks -- so that PRs don't get blocked by external dependencies.`fail`
However, this behavior can be disabled by setting `tryOrSkipBehavior: 'fail'`.
In this mode, if the command fails, the test will fail as normal.
If a `tryOrSkipSuite` fails, the test will fail as normal, and the rest of the tests in the suite will be skipped.
This setting is especially useful when you want to see failed dependencies -- such as in nightly builds, or for local development.### `tryOrSkipMessage: string` and `tryOrSkipSuiteMessage: string`
When `tryOrSkip` fails, this message will be appended to the skipped test title.
**This only works with `cypress run`**. The message will not show up in the `cypress open` UI.
Example:
```
// cypress.config.json
"tryOrSkipMessage": " (skipped: <%= error %>)",
"tryOrSkipSuiteMessage": " (skipped suite)",
```
Notice you can include the `error` in the message.Example output:
```
~ if feature-a is enabled (skipped: AssertionError: Expected '#feature-a' to exist)
~ the feature-a button will be visible (skipped suite)
```