mirror of
https://github.com/Unleash/unleash.git
synced 2024-12-28 00:06:53 +01:00
c0369b739e
This PR fixes a race condition between e2e tests where bulk archiving all toggles in the default project would delete toggles used for the features e2e tests. It does by isolating the features.spec and overview.spec to their respective projects, so that they always operate on isolated data. ### Future enhancements: I'm not particularly fond of passing the projectName through to all the helper methods. It complicates the tests more than it should. I would like to be able to set the project once per test and have all the helper methods be aware of the context. Something like this should work: ``` before(() => { cy.wrap('projectId').as('project'); }) ``` And in the helpers: ``` export const createFeature_API = ( featureName: string, options?: Partial<Cypress.RequestOptions>, ): Chainable<any> => { return cy.get('@project').then((project) => { projectName = project || 'default'; return cy.request({ url: `${baseUrl}/api/admin/projects/${projectName}/features`, method: 'POST', body: { name: `${featureName}`, description: 'hello-world', type: 'release', impressionData: false, }, ...options, }); }); }; ``` |
||
---|---|---|
.. | ||
fixtures | ||
integration | ||
support | ||
global.d.ts | ||
README.md | ||
tsconfig.json |
Unleash Behavioural tests
Add common commands to Cypress
global.d.ts
is where we extend Cypress typesAPI.ts
contains api requests for common actions (great place for cleanup actions)UI.ts
contains common functions for UI operationscommands.ts
is the place to map the functions to a cypress command
Test Format
Ideally each test should manage its own data.
Avoid using after
and afterEach
hooks for cleaning up. According to Cypress docs, there is no guarantee that the functions will run
Suggested Format:
prepare
when
then
clean
Passing (returned) parameters around
it('can add, update and delete a gradual rollout strategy to the development environment', async () => {
cy.addFlexibleRolloutStrategyToFeature_UI({
featureToggleName,
}).then(value => {
strategyId = value;
cy.updateFlexibleRolloutStrategy_UI(featureToggleName, strategyId).then(
() => cy.deleteFeatureStrategy_UI(featureToggleName, strategyId)
);
});
});