자바스크립트를 사용한 GraphQL Subscriptions를 위한 테스트 자동화 방법

GraphQL은 API 개발을 간편하게 해주는 매우 강력한 쿼리 언어입니다. 그리고 GraphQL Subscriptions는 실시간 데이터 업데이트를 위한 기능을 제공합니다. 이러한 Subscriptions를 자동화된 테스트로 검증하는 것은 매우 중요합니다. 이번 글에서는 자바스크립트를 사용하여 GraphQL Subscriptions를 테스트 자동화하는 방법을 알아보겠습니다.

1. Jest를 이용한 테스트 환경 설정

GraphQL Subscription을 테스트하기 위해 우리는 테스트 프레임워크로 Jest를 사용할 것입니다. Jest는 자바스크립트의 테스트를 위해 널리 사용되는 인기 있는 도구입니다.

설치하기 전에 프로젝트의 루트 디렉토리에서 다음 명령어를 실행하여 Jest를 설치합니다.

npm install --save-dev jest

Jest를 설치한 후, 프로젝트의 루트 디렉토리에 __tests__ 디렉토리를 생성합니다. 이 디렉토리는 Jest가 자동으로 테스트 파일을 찾을 수 있는 디렉토리입니다. 테스트 파일은 .test.js 또는 .spec.js 로 끝나야 합니다.

2. GraphQL Subscription 테스트 작성

이제 GraphQL Subscription을 테스트하기 위한 테스트 파일을 작성해보겠습니다.

// __tests__/subscription.test.js

const { ApolloServer, PubSub } = require('apollo-server');
const { createTestClient } = require('apollo-server-testing');
const { typeDefs, resolvers } = require('../src/schema');

describe('Subscription Testing', () => {
  let server;
  let query;
  let mutate;
  
  beforeAll(() => {
    server = new ApolloServer({
      typeDefs,
      resolvers,
      context: () => ({
        pubsub: new PubSub(),
      }),
    });
    const testClient = createTestClient(server);
    query = testClient.query;
    mutate = testClient.mutate;
  });

  it('should receive new messages from a subscription', async (done) => {
    const subscription = `
      subscription {
        newMessage {
          id
          content
          createdAt
        }
      }
    `;

    const { subscribe } = await query({ query: subscription });

    const resultPromise = subscribe();
  
    server.emit('newMessage', {
      id: '1',
      content: 'Hello, world!',
      createdAt: new Date().toISOString(),
    });

    const result = await resultPromise;
  
    expect(result.data.newMessage).toEqual({
      id: '1',
      content: 'Hello, world!',
      createdAt: new Date().toISOString(),
    });
    
    done();
  });
});

위의 코드에서는 Jest를 사용하여 GraphQL Subscription을 테스트하는 기본 틀을 보여줍니다. describe 블록은 하나 이상의 테스트를 그룹화하는데 사용됩니다. beforeAll 블록에서는 ApolloServer를 설정하고, 테스트 클라이언트를 생성합니다.

it 블록은 개별 테스트 케이스를 정의합니다. 위의 예시에서는 should receive new messages from a subscription 이라는 이름으로 테스트가 정의되었습니다. 이 테스트는 GraphQL Subscription을 통해 새로운 메시지를 수신하는지 확인합니다.

결과적으로, 메시지가 예상한 형식으로 도착하는지 확인하기 위해 expect 구문을 사용합니다. 예상한 결과와 실제 결과를 비교하여 테스트가 성공적으로 통과되는지 확인합니다.

3. 테스트 실행

이제 작성한 테스트를 실행해보겠습니다. 프로젝트의 루트 디렉토리에서 다음 명령어를 실행합니다.

npx jest

Jest는 __tests__ 디렉토리에 있는 테스트 파일을 자동으로 인식하고 실행합니다. 테스트 결과가 터미널에 출력되며, 테스트가 성공적으로 완료되면 통과된 테스트 케이스의 수가 표시됩니다.

이것으로 GraphQL Subscriptions를 위한 테스트 자동화 방법을 알아보았습니다. Jest를 사용하여 간단한 테스트 케이스를 작성하고 실행함으로써 GraphQL Subscriptions를 신속하게 검증할 수 있습니다.

더 많은 테스트 케이스를 작성하고 심화된 테스트 시나리오를 만들 수도 있습니다. Jest의 다양한 기능과 GraphQL Subscriptions의 다양한 기능을 활용하여 프로젝트의 안정성과 신뢰성을 높일 수 있습니다.

#GraphQL #테스트