https://github.com/gcirone/cypress-contract-stubs
Cypress plugin for Spring Contract Stubs
https://github.com/gcirone/cypress-contract-stubs
contract-testing cypress cypress-plugin e2e mocks spring-cloud-contract stubs stubserver testing
Last synced: 6 months ago
JSON representation
Cypress plugin for Spring Contract Stubs
- Host: GitHub
- URL: https://github.com/gcirone/cypress-contract-stubs
- Owner: gcirone
- License: mit
- Created: 2021-06-03T14:37:11.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-02-05T22:26:40.000Z (over 3 years ago)
- Last Synced: 2025-10-27T02:57:44.598Z (9 months ago)
- Topics: contract-testing, cypress, cypress-plugin, e2e, mocks, spring-cloud-contract, stubs, stubserver, testing
- Language: TypeScript
- Homepage:
- Size: 259 KB
- Stars: 3
- Watchers: 1
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Cypress Contract Stubs
The **cypress-contract-stubs** add support for using [Spring Cloud Contract Stub](https://spring.io/projects/spring-cloud-contract) entries when testing with Cypress.
This plugin can download artifacts from **nexus** and **nexus3** artifact repositories and cache them locally.
Provide commands to automatically intercept application requests with stubs matched without the need of using the [stub runner](https://cloud.spring.io/spring-cloud-contract/1.2.x/multi/multi__spring_cloud_contract_stub_runner.html) server.
## Get started
### Installation
Install the plugin by running:
```shell
npm install --save-dev cypress-contract-stubs
```
### Plugin configuration
Add it to your plugin file: `cypress/plugins/index.js`
```javascript
const { contractStubsPlugin } = require('cypress-contract-stubs');
module.exports = async (on, config) => {
await contractStubsPlugin(on, config);
return config;
}
```
Add configuration for remote and local stubs to your `cypress.json` file.
The default *mode* is `remote` and the default *type* is `nexus3`. You can also configure default stub server and repository for the artifacts.
```json
{
"env": {
"stubs_server": "http://nexus3.proxy.internal",
"stubs_repository": "maven-releases",
"stubs": [
{
"id": "internal.contracts:artifact-name:+:stubs"
},
{
"mode": "remote",
"id": "internal.contracts:artifact-name:+:stubs",
"type": "nexus",
"server": "http://nexus.proxy.internal",
"repository": "releases"
},
{
"mode": "local",
"file": "artifact-name-1.318-SNAPSHOT-stubs.jar"
},
{
"mode": "local",
"file": "artifact-name-stubs.jar",
"path": "cypress/fixtures"
}
]
}
}
```
*Note: The plugin will download the latest artifact version if the `+` or `latest` is added to the stubs **id** coordinate*
### Commands configuration
Add it to your support file: `cypress/support/index.js`
```javascript
import 'cypress-contract-stubs/commands';
```
In your test files, will be available the following commands:
- `cy.interceptStubs` Intercept network requests with matched stubs
- `cy.contractStubs` Get all available stub entries
- `cy.contractStub` Get stub entry by options (if more stubs match the criteria will be returned the first occurrence)
```javascript
cy.interceptStubs();
cy.contractStubs().then((stubs) => console.log(stubs));
cy.contractStub({ name: 'stubName' }).then((stub) => console.log(stub));
```
## Intercept network request
### Automatic intercept
To automatically intercept network requests use:
```javascript
cy.interceptStubs(); // Intercept all stub requests
cy.interceptStubs({ names: ['stubNameA', 'stubNameB'] }); // Intercept stub requests filtered by names
cy.visit('/')
```
*The command setup an intercept for each stub present with the syntax defined in [WireMock documentation](https://wiremock.org/docs/stubbing/)*
### Manual intercept
To manually intercept network request use:
```javascript
cy.contractStub({ name: 'stubName' }).then((stub) => {
const { name, request, response } = stub;
cy.intercept(request.url, (req) => {
req.reply(response.status, response.body, response.headers)
}).as(name);
});
cy.visit('/')
```
## Debug
Set an environment variable `DEBUG=cypress:stubs:*` to log all stubs plugin operations.
Check the Cypress documentation for more info about [printing debug logs](https://docs.cypress.io/guides/references/troubleshooting#Print-DEBUG-logs).
## Small print
Author: Gianluca Cirone <gianluca.cirone@gmail.com> © 2022
- [@freshdevit](https://twitter.com/freshdevit)
- [gianlucacirone](https://www.linkedin.com/in/gianlucacirone)
License: MIT - do anything with the code, but don't blame me if it does not work.
Support: if you find any problems with this module, email / tweet /
[open an issue](https://github.com/gcirone/cypress-contract-stubs/issues) on Github
## License
cypress-contract-stubs is [MIT licensed](./LICENSE).