亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Jest如何測試GraphQL的實時查詢

發布時間:2024-08-27 21:33:51 來源:億速云 閱讀:81 作者:小樊 欄目:編程語言

要使用Jest測試GraphQL的實時查詢,你需要模擬WebSocket連接并在測試中發送和接收消息

  1. 首先,確保你已經安裝了以下依賴項:
npm install --save-dev jest @types/jest graphql-ws ws
  1. 創建一個__tests__文件夾來存放你的測試文件。

  2. __tests__文件夾中創建一個名為graphql-realtime.test.ts的文件,然后編寫以下代碼:

import { createServer } from 'http';
import { Server } from 'ws';
import { GraphQLSchema, GraphQLObjectType, GraphQLString } from 'graphql';
import { useServer } from 'graphql-ws/lib/use/ws';
import { SubscriptionServer } from 'subscriptions-transport-ws';
import { execute, subscribe } from 'graphql';
import { PubSub } from 'graphql-subscriptions';

// 創建一個簡單的GraphQL schema
const schema = new GraphQLSchema({
  query: new GraphQLObjectType({
    name: 'Query',
    fields: {
      message: {
        type: GraphQLString,
        resolve: () => 'Hello World!',
      },
    },
  }),
  subscription: new GraphQLObjectType({
    name: 'Subscription',
    fields: {
      message: {
        type: GraphQLString,
        subscribe: (_, __, { pubsub }) => pubsub.asyncIterator('MESSAGE'),
      },
    },
  }),
});

describe('GraphQL Realtime Query', () => {
  let httpServer;
  let wsServer;
  let pubsub;

  beforeEach(() => {
    httpServer = createServer();
    wsServer = new Server({ server: httpServer });
    pubsub = new PubSub();

    useServer(
      {
        schema,
        execute,
        subscribe,
        context: () => ({ pubsub }),
      },
      wsServer
    );

    httpServer.listen(4000);
  });

  afterEach(() => {
    if (httpServer) {
      httpServer.close();
    }
    if (wsServer) {
      wsServer.close();
    }
  });

  it('should receive realtime messages', async () => {
    // 創建一個WebSocket客戶端
    const client = new WebSocket('ws://localhost:4000/graphql');

    // 等待WebSocket連接建立
    await new Promise((resolve) => client.onopen = resolve);

    // 訂閱實時消息
    client.send(JSON.stringify({
      type: 'start',
      id: '1',
      payload: {
        query: `
          subscription {
            message
          }
        `,
      },
    }));

    // 發送實時消息
    pubsub.publish('MESSAGE', { message: 'Hello from realtime query!' });

    // 等待實時消息到達
    const response = await new Promise((resolve) => client.onmessage = resolve);

    // 斷言收到的消息
    expect(JSON.parse(response.data)).toEqual({
      type: 'data',
      id: '1',
      payload: { data: { message: 'Hello from realtime query!' } },
    });
  });
});

這個測試將創建一個GraphQL服務器,使用graphql-ws庫提供實時查詢支持,并通過WebSocket連接發送和接收實時消息。測試將訂閱實時消息,然后發布一條消息,最后檢查是否收到了正確的消息。

  1. 運行測試:
npx jest __tests__/graphql-realtime.test.ts

這個測試應該能夠成功通過,表明你已經成功地使用Jest測試了GraphQL的實時查詢。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柞水县| 贵港市| 嵊泗县| 广东省| 方城县| 聊城市| 哈尔滨市| 韶山市| 岢岚县| 甘泉县| 德阳市| 灵川县| 瓦房店市| 兴义市| 鄂伦春自治旗| 合山市| 沽源县| 淮南市| 铜鼓县| 望江县| 青冈县| 仲巴县| 江达县| 平利县| 许昌县| 安化县| 静乐县| 云龙县| 柘城县| 苏尼特右旗| 松桃| 开封县| 水富县| 海门市| 永靖县| 乐陵市| 新津县| 碌曲县| 贵溪市| 乌兰浩特市| 彭阳县|