如何用柏树操纵 __APOLLO_STATE__

How to manipulate __APOLLO_STATE__ with cypress

我们正在向客户端发出一个服务器端请求,该请求 returns 在 window 下具有 __APOLLO_STATE__ 对象的页面包含该页面使用的所有 graphql 数据。 目标是操纵 window 以模拟我们的 API.

问题是,__APOLLO_STATE__ 不可用 onBeforeLoad but only onLoad

所以onBeforeLoad

  cy
  .visit(url, {
    onBeforeLoad: (contentWindow) => {
      cy.stub(contentWindow, '__APOLLO_STATE__').returns('');
    },
  })

表示存根不会更改任何内容,因为页面已经加载,并且

onload

  cy
  .visit(url, {
    onLoad: (contentWindow) => {
      cy.stub(contentWindow, '__APOLLO_STATE__').returns('');
    },
  })

会抛出错误,因为它不存在

Cannot stub non-existent own property APOLLO_STATE

遇到这个问题的人有什么建议吗?

不确定这是否是你的意思,但你可以拦截每个 graphql 请求并决定你想要什么 return

Cypress.Commands.add('mockGQL', (query, body) => {

cy.intercept('/graphql', (req) => {
    if (req.body.includes(query)) {
      req.reply({
        body: body,
        headers: {
          'access-control-allow-origin': '*'
        }
      })
    }
  })