【发布时间】:2023-04-02 15:05:01
【问题描述】:
我正在尝试拦截 graphql 突变以访问其响应。赛普拉斯没有注意到该请求并且cy.wait() 超时。
测试
describe('/profile', () => {
beforeEach(() => {
cy.server()
cy.route({
method: 'POST',
url: Cypress.config().baseUrl + '/graphql',
}).as('graphql')
cy.fastLogin()
cy.visit('/profile')
})
it('is possible to change password', () => {
cy.get('[data-cy=change-password-btn]').click()
cy.get('[name=oldPassword]').type(Cypress.config().password)
cy.get('[name=newPassword]').type('password1')
cy.get('[name=confirmNewPassword]').type('password1')
cy.get('[data-cy=change-pw-form-btn]').click()
cy.wait('@graphql').then(xhr => {
cy.log(JSON.stringify(xhr.response.body))
})
cy.get('[data-cy=notification-container]').should(
'contain',
'Your password has been changed'
)
})
我发现许多人遇到的一个常见问题是他们在cy.visit() 之后调用cy.server() 或cy.route()。这不是我的情况,但 cy.wait() 仍然失败。
如果有什么不同的话,我有一个 NodeJS 后端和一个 ReactJS 前端。
有什么想法吗?
【问题讨论】:
-
这个登录请求是通过
fetch发送的吗?见github.com/cypress-io/cypress/issues/95 -
是的,实际上每个 graphql 调用都通过
fetch。这就是为什么cypress没有看到他们。我使用了这个要点:gist.github.com/yagudaev/2ad1ef4a21a2d1cfe0e7d96afc7170bc 在我的测试中将fetch转换为xhr。现在我可以看到cypress中的查询,但cy.wait()调用仍然超时。