【发布时间】:2018-10-03 10:53:14
【问题描述】:
我正在将旧的 capybara 测试转移到 cypress.io,因为我们的应用程序正在采用 SPA 方式。
在我们的案例中,我们有超过 2000 个测试,涵盖了很多功能。 因此,测试功能的常见模式是让用户创建并发布报价。
在开始时,我写了 cypress 进入低谷页面并单击所有内容的案例。它有效,但我看到提供创建 + 发布需要将近 1.5 分钟才能完成。有时我们需要多个报价。所以我们有一个需要 5 分钟的测试,还有 1999 年要重写。
我们想出了 REST API 来创建报价和用户,基本上是测试环境准备的快捷方式。
我发现使用async/await 一切正常。事情就是这样。如果我想在 cypress 中使用普通的异步 JS 代码,我会得到 Error: Cypress detected that you returned a promise from a command while also invoking one or more cy commands in that promise.
它是这样的:
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
})
})
这个 sn-p 按预期工作。首先它在 beforeEach 之前触发并创建整个 env,然后当它完成后,它会进一步到 beforeEach 并开始测试。
现在我想合并 before 和 beforeEach 喜欢
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')
})
这会因为 async 关键字而失败。 现在的问题是:如何重写它以同时使用 async/await 和 cypress 命令?我试图用普通的 Promise 重写它,但它也不起作用......
任何帮助表示赞赏。
【问题讨论】:
标签: javascript testing async-await cypress