Execute your tests based on Split.io splits and treatments


This plugin stores your toggles with treatments from split.io as environment variables so you can access them via Cypress.env(). Also it allows you to store splits with treatments as fixtures
``sh-session`
npm install --save-dev cypress-splitio
or
`sh-session`
yarn add --dev cypress-splitio
Since this is a plugin, you will need to modify your file ./cypress/plugins/index.js to look something like this:
`javascript`
module.exports = (on, config) => {
config = splitioPlugin(config)
return config
}
Here is an example of splits.json structure
`json`
{
'feature-one': 'on',
'feature-two': 'off',
'feature-three': 'custom'
}
If you want to turn off fixture creation set fixture = false.
`javascript`
module.exports = (on, config) => {
config = splitioPlugin(config, fixture = false)
return config
}
Once you update your plugins config, you can now get all current splits via Cypress.env('split-name') or via splits.json fixture. Just specify a valid split environment SDK key like this:
`sh-session`
npx cypress run --env SPLITIO_CONFIG=YOUR_SDK_KEY_HERE
Use the following syntax if you need to get your split configuration based on custom attributes
`json`
npx cypress run --env SPLITIO_CONFIG='{"KEY":"YOUR_SDK_KEY_HERE","license":"beta"}'
You can now have a different behavior in your test based on split environment variable:
`javascript`
describe( 'Dashboard page', () => {
it( '...', () => {
if(Cypress.env('split-one') === 'on') {
...
} else {
...
}
} );
} );
Or you can do the same with a fixture
`javascript`
describe( 'Dashboard page', () => {
it( '...', () => {
cy.fixture( 'splits' ).then( ( json ) => {
if(json['feature-one'] === 'on') {
...
} else {
...
}
} );
} );
} );
You can also use cypress-skip-test plugin to define when to execute or skip a test
`javascript`
describe( 'Dashboard page', () => {
it( '...', () => {
cy.skipOn(Cypress.env('split-two') === 'on');
} );
} );
Or like this
`javascript``
onlyOn(Cypress.env('split-two') === 'on', () => {
describe('foo', () => {
it('works', () => {...})
})
});
Want to help or have a suggestion? Open a new ticket and we can discuss it or submit a pull request.
MIT