Cypress E2E 模拟 GraphQL 订阅作为查询

问题描述 投票:0回答:1

有没有办法从 GraphQL 模拟订阅?我只需要返回一些数据一次。因此,几乎不用订阅,而是使用

GET
查询。

我确实查看了Cypress-Documentation,但我只看到了一些有关查询和突变的内容。

订阅使用

wss
而不是
https
协议,并且不是
POST
方法。因此,我认为不可能使用

cy.intercept('POST', 'http://localhost:3000/graphql', (req) => {...})

请求模拟的风格。

对于 GraphQL 请求,我使用 React Apollo 库。

奇怪的是我在这个方向上没有发现任何东西。我是 E2E 测试的新手,所以也许我的思维过程是错误的。

我正在使用 Cypress v13。

graphql cypress e2e-testing
1个回答
0
投票

这里有一个带有自定义命令的问题线程模拟 websockets #2492 显然对作者有用,并且有 7 个拇指。

import { Server, WebSocket } from "mock-socket"

const mockGraphQlSocket = new Server(Cypress.env("GRAPHQL_WEB_SOCKET"))

Cypress.Commands.add("mockGraphQLSocket", mocks => {
  cy.on("window:before:load", win => {
    win.WebSocket = WebSocket
    mockGraphQlSocket.on("connection", socket => {
      socket.on("message", data => {
        const { id, payload } = JSON.parse(data)

        if (payload && mocks.hasOwnProperty(payload.operationName)) {
          mocks[payload.operationName](
            // Delegate the socket send call to the party owning the mock data since multiple calls might need to be made (for example to update multiple individual entries)
            data =>
              socket.send(
                JSON.stringify({
                  type: "data",
                  id,
                  payload: { errors: [], data }
                })
              ),
            payload.variables
          )
        }
      })
    })
  })
})

测试中

cy.mockGraphQLSocket({
    yourGraphQlQuery: (send, { uuids }) => {
      uuids.forEach(id => {
        send({
          yourGraphQlQuery: {
            ...yourMockData,
            id
          }
        })
      })
    }
  })
© www.soinside.com 2019 - 2024. All rights reserved.