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的实时查询。

推荐阅读:
  1. jest测试react native组件的步骤分析
  2. 怎么使用React Testing Library和Jest完成单元测试

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jest

上一篇:Jest与Jest测试性能调优

下一篇:Jest框架中的测试断言库选择

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》