I'm trying to create multiple tests based off the number of functions in an array that I pass in, so that I can have one describe block and create tests as our project grows.
I've found multiple examples (here, real-world app examples) but all these examples create a simple array without any Cypress commands invoked. I need to pass in an array of functions that invoke Cypress (NOT Custom Commands) commands like cy.get()
//loginPageController.js
export default class LoginPageController {
thingOne() {
cy.get('some things')
expect(some assertion)
}
thingTwo() {
cy.get('some other things')
expect(another assertion)
}
getAllThings() {
return [this.thingOne(), this.thingTwo()]
}
}
//login.spec.js
import LoginPageController from '../../support/Controllers/loginPageController'
const lPC = new LoginPageController
describe('Login Tests', function() {
beforeEach(function() {
cy.visit('myapp')
})
lPC.getAllThings().forEach(function() {
it('tries each scenario', function() {
// do stuff
})
})
The following error originated from your test code, not from Cypress.
> Cannot call cy.get() outside a running test.
This usually happens when you accidentally write commands outside an it(...) test.
it.forEach(getAllTheThings)('it should do the things', function(){})before block const lPC.getAllThings() = allThings which actually just executes the function successfully in the beforecy.wrap(lPC.getAllThings()).as('allTheThings) (which is probably invalid but I'm just taking swings at this point)fixture file but .js doesn't seem to be easily supported currently and I'll be passing in an array of functions, not a simple JSON object.I'm just trying to keep things DRY and only write one describe that spits out as many tests as functions I include in that lPC.getAllThings()