I'm in the middle of process of moving our old capybara tests to cypress.io as our application is going SPA way.
In our case we have over 2000 tests covering a lot of features.
So common pattern to test feature is to have an user with created and published offer.
On the beginning I wrote case where cypress were going trough page and clicking everything. It worked but I saw that offer create + publish took almost 1,5 minute to finish. And sometimes we need multiple offers. So we have a test which takes 5 minutes and we have 1999 left to rewrite.
We came up with REST API to create offer and user, basically shortcut for test env preparation.
I came to the point where everything is working using async/await
. So here's the thing. If I want to use normal async JS code with cypress I get Error: Cypress detected that you returned a promise from a command while also invoking one or more cy commands in that promise.
Here's how it looks like:
const faker = require('faker')
import User from '../../support/User';
describe('Toggle button for description offer', () => {
const user = new User({
first_name: faker.name.firstName(),
last_name: faker.name.firstName(),
email: `QA_${faker.internet.email()}`,
password: 'xxx'
})
let offer = null
before(async () => {
await user.createOnServer()
offer = await user.createOffer()
await offer.publish()
})
beforeEach(() => {
user.login()
cy.visit(`/offers/${offer.details.id}`)
cy.get('.offer-description__content button').as('showMoreButton')
})
it('XXX', function () {
...some test
})
})
This snippet works as expected. Firstly it fires before and creates whole env then when it's done it goes further to beforeEach and starts testing.
Now I would like to merge before and beforeEach like
before(async () => {
await user.createOnServer()
offer = await user.createOffer()
await offer.publish()
user.login()
cy.visit(`/offers/${offer.details.id}`)
cy.get('.offer-description__content button').as('showMoreButton')
})
Which will fail because of async keyword.
Now the question is: how to rewrite it to use async/await and cypress commands together? I tried to rewrite it with normal Promise but It won't work too ...
Any help appreciated.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…