UI for testing API in Cypress
npm install @a8trejo/cypress-plugin-api
Cypress plugin for effective API testing. Imagine Postman, but in Cypress. Prints out information about the API call in the Cypress App UI.
!Cypress plugin for testing API
requestMode to add cy.api() features to cy.request() commandInstall this package:
``bash`
npm i cypress-plugin-apior
yarn add cypress-plugin-api
Import the plugin into your cypress/support/e2e.js file:`js`
import 'cypress-plugin-api'
// or
require('cypress-plugin-api')
command. This command works exactly like cy.request() but in addition to calling your API, it will print our information about the API call in your Cypress runner.#### Snapshot only mode
If you want to combine your API calls with your UI test, you can now use
snapshotOnly mode, that will hide the plugin UI view after command ends. You can access it within the timeline.snapshotOnly mode is set to false by default. To set up snapshotOnly mode, add following to your test configuration:`js
it('my UI & API test', { env: { snapshotOnly: true } }, () => { cy.visit('/') // open app
cy.api('/item') // call api
cy.get('#myElement') // still able to access element on page
})
`or you can add the configuration to your
cypress.config.{js,ts} file:
`js
import { defineConfig } from 'cypress'export default defineConfig({
e2e: {
setupNodeEvents(on, config) {
},
env: {
snapshotOnly: true
}
},
})
`#### Hiding credentials
You can hide your credentials by passing
hideCredentials option to your env configuration. This will hide all the credentials from UI, but you can still access them via console. This option is set to false by default.`js
it('my secret test', { env: { hideCredentials: true } }, () => { cy.api({
url: '/',
headers: {
authorization: Cypress.env('myToken')
}
})
})
`The result will look like this:
!Cypress plugin for testing API
You can also hide any credentials you want by defining array of keys in
hideCredentialsOptions,`js
it('my secret test', {
env: {
hideCredentials: true,
hideCredentialsOptions: {
headers: ['authorization'],
auth: ['pass'],
body: ['username'],
query: ['password']
}
}
}, () => { cy.api({
url: '/',
headers: {
authorization: Cypress.env('myToken') // hidden
},
auth: {
pass: Cypress.env('myPass') // hidden
},
body: {
username: Cypress.env('myUser') // hidden
},
qs: {
password: Cypress.env('password') // hidden
}
})
})
`This will override all the defaults set by
hideCredentials.####
requestMode - enable UI for cy.request() command
This setting adds all the functionality of cy.api() command to cy.request(). It’s set to false by default. This means that when you call cy.request() in your test, it will show UI.#### TypeScript support
In most cases, types work just by installing plugin, but you can add the types to your
tsconfig.json
`json
{
"types": ["cypress-plugin-api"]
}
`
This will add types for cy.api() command, it’s returned values as well as env properties.$3
All the issues can be found on issues page, feel free to open any new ones or contribute with your own code.$3
You can use yalc to use your local changes as the package in another repository without needing to publish to NPM.
Using yalc
1. Install yalc globally with
npm i yalc -g.2. Run
npm run yalc:build in the root of your local cypress-plugin-api repository (and do this every time you want to make your latest changes available).3. Run
yalc link cypress-plugin-api in the root of your local automation repository (only necessary to do this once).4. To constantly pull the latest local api plugin changes into your local automation repository, run
yalc update from the root.5. If you want to stop using yalc, type
yalc retreat --all in the root of automation repository. And if you want to start using it again, type yalc restore --all`.
...powered by coffee and love ❤️ Filip Hric