Search code examples
graphqlnestjse2e-testingsupertest

How to test nestjs with graphql by end to end?


In the test/posts/posts.e2e-spec.ts file

import { INestApplication } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Test, TestingModule } from '@nestjs/testing';
import request = require('supertest');
import { PostsModule } from '../../src/posts/posts.module';

describe('Posts (e2e)', () => {
  const posts = {
    id: 1,
    name: 'FirstPost #1',
  };

  let app: INestApplication;

  beforeAll(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [
        TypeOrmModule.forRoot({
          type: 'mysql',
          ...
        }),
        PostModule,
      ],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

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

  describe('post', () => {
    it('should retrieve all post data', async () => {
      request(app.getHttpServer())
      .post('/graphql')
      .send({
        query:
          `{findPosts() {
            name
          }}`,
      })
      .expect(200)
      .expect((res) => {
        console.log(res.body.data)
        expect(res.body.data.post.length).toEqual(posts.length)
      })
    })
  })
});

I created migration and inserted data into database first, then run this test, it can't go to the expect items. Even set console log I can't see anything in the output.

So maybe the /graphql can't be access in this way? I can access the endpoint from browser as http://localhost:3000/graphql.


If import supertest as

import * as request from 'supertest';

In the line request it showed:

This expression is not callable. Type ‘typeof supertest’ has no call signatures.

The version of them:

  • supertest: 6.1.3
  • @types/supertest: 2.0.11

Solution

  • Check out this very useful link https://github.com/jmcdo29/testing-nestjs/tree/main/apps/graphql-sample. It explains a lot of things regarding tests including graphql nestjs testing along with sample application