web-dev-qa-db-fra.com

La plaisanterie a détecté la 1 Poignée ouverte suivante potentiellement la juscule de la sortie: TCPServerWrap

Je fais une extrémité de base pour mettre fin aux tests ici, pour le moment où il échoue, mais je ne peux d'abord pas me débarrasser de la poignée ouverte.

Ran all test suites.

Jest has detected the following 1 open handle potentially keeping Jest from exiting:

  ●  TCPSERVERWRAP

      40 |     }
      41 |     return request(app.getHttpServer())
    > 42 |       .post('/graphql')
         |        ^
      43 |       .send(mutation)
      44 |       .expect(HttpStatus.OK)
      45 |       .expect((response) => {

      at Test.Object.<anonymous>.Test.serverAddress (../node_modules/supertest/lib/test.js:61:33)
      at new Test (../node_modules/supertest/lib/test.js:38:12)
      at Object.obj.<computed> [as post] (../node_modules/supertest/index.js:27:14)
      at Object.<anonymous> (app.e2e-spec.ts:42:8)
import { Test, TestingModule } from '@nestjs/testing'
import { HttpStatus, INestApplication } from "@nestjs/common";
import * as request from 'supertest'
import { AppModule } from '../src/app.module'

describe('AppController (e2e)', () => {
  let app: INestApplication

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile()

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

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

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(HttpStatus.OK)
      .expect('Hello World!')
  })

  it('mutation', async () => {
    const mutation = {
      query: `mutation Create($title: String!) {
        create(title: $title) {
          id,
          title
        }
      }`,
      variables: {
        title: 'Mon programme',
      },
    }
    return request(app.getHttpServer())
      .post('/graphql')
      .send(mutation)
      .expect(HttpStatus.OK)
      .expect( (response) => {
        expect(response.body).toBe({
          id: expect.any(String),
          title: 'Mon programme',
        })
      })
  })
})

Une idée de quoi bloquer le coureur de test?

Notez que, comme j'utilise Nestjs, je ne dois pas utiliser la méthode .end(done) à la fin du test.

PS: Apparemment, je dois beaucoup de code sur cette question et j'ai besoin d'ajouter encore plus de détails, mais je n'ai aucune idée de ce que je peux en dire plus.

2
A Mehmeto

Je n'ai toujours pas trouvé une solution parfaite, mais pour le moment je suis allé pour cette solution de contournement:

jest --config ./test/jest-e2e.json --forceExit

L'option ForceExit tue les openhandles en quelque sorte et déverrouille tout. Pourtant, je cherche toujours la "manière appropriée" de la manipulation de cette question.

2
A Mehmeto

Vous reconfigurez à nouveau toute l'application beforeEach, mais la déchirez que dans afterAll, ce qui signifie que vous fuyez probablement une mémoire en cours de route. Vous attribuez une nouvelle instance à la variable de l'application, mais il existe des références cachées les plus susceptibles qui empêchent la collecte des ordures d'effacer l'instance précédente - comme la référence de la fonction request obtenu.

Changer beforeEach à beforeAll et vous devriez être prêt à partir.

1
Papooch