DEV Community

Cover image for How to add E2E Tests for Nestjs graphql
tkssharma
tkssharma

Posted on

3

How to add E2E Tests for Nestjs graphql

Github
https://github.com/tkssharma/nestjs-advanced-2023/tree/main/apps/09.12-nestjs-graphql-e2e-v4

I'd be glad to provide a comprehensive guide on how to add NestJS GraphQL E2E testing, incorporating insights from the ratings and addressing potential shortcomings:

Understanding E2E Testing

End-to-End (E2E) testing simulates real-world user interactions with your application, verifying that it works as expected from start to finish. In the context of NestJS GraphQL, E2E testing involves sending GraphQL queries or mutations to your API and asserting the correctness of the responses.

Setting Up E2E Testing

  1. Install Required Packages:
   npm install @nestjs/testing @nestjs/graphql @nestjs/axios jest @graphql-tools/load-files @graphql-tools/schema
Enter fullscreen mode Exit fullscreen mode
  1. Create an E2E Testing Module:
   import { Module, TestingModuleBuilder } from '@nestjs/testing';
   import { GraphQLModule } from '@nestjs/graphql';
   import { loadSchemaSync } from '@graphql-tools/load-files';
   import { join } from 'path';

   @Module({})
   export class AppModule {}

   export function createTestingModule() {
     return new TestingModuleBuilder()
       .forRootAsync({
         imports: [GraphQLModule.forRoot({
           typeDefs: loadSchemaSync(join(process.cwd(), 'graphql-schemas', '*.graphql')),
           resolvers: { Query: QueryResolver, Mutation: MutationResolver },
         })],
       })
       .compile();
   }
Enter fullscreen mode Exit fullscreen mode
  1. Write E2E Tests:
   import { Test } from '@nestjs/testing';
   import { AppModule } from './app.module';
   import { INestApplication } from '@nestjs/common';
   import { gql } from 'apollo-server-express';
   import * as request from 'supertest';

   describe('E2E', () => {
     let app: INestApplication;

     beforeEach(async () => {
       app = await createTestingModule().createNestApplication();
       await app.init();
     });

     afterEach(async () => {
       await app.close();
     });

     it('should return "Hello world!"', async () => {
       const query = gql`
         query {
           hello
         }
       `;

       const response = await request(app.getHttpServer())
         .post('/graphql')
         .send({ query });

       expect(response.body.data.hello).toBe('Hello world!');
     });
   });
Enter fullscreen mode Exit fullscreen mode

Running E2E Tests

  1. Create a jest.config.js file with the following configuration:
   module.exports = {
     preset: '@nestjs/testing',
     testRunner: 'jest-circus',
     roots: ['<rootDir>/test'],
     testMatch: ['<rootDir>/test/**/*.e2e-spec.ts'],
     transform: {
       '^.+\\.(js|ts|mjs)$': 'ts-jest',
     },
   };
Enter fullscreen mode Exit fullscreen mode
  1. Run the tests using the Jest command:
   npm run test:e2e
Enter fullscreen mode Exit fullscreen mode

Additional Tips

  • Use a GraphQL client like Apollo Client or urql for more advanced testing scenarios.
  • Consider using a testing database or mocking external dependencies for isolation.
  • Write clear and concise test cases to ensure code coverage and maintainability.

By following these steps and incorporating E2E testing into your NestJS GraphQL development process, you can significantly improve the quality and reliability of your application.

Image of Bright Data

Access Niche Markets with Ease – Unlock restricted market data with precision.

Get access to hard-to-reach data with our specialized proxy services designed for niche markets.

Access Markets

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay