An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          

# Cypress Contract Stubs



Npm


Github Action


Cypress


Jest


Codecov

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).