关闭应用程序的 JestJS 测试不起作用

The test with JestJS that closes the application does not work

朋友们,我有问题了!

我正在使用 NestJS 测试我的 API。 我正在使用 Jest 进行测试。不幸的是,我遇到了以下错误:

TypeError: Cannot read properties of undefined (reading 'close')

这个错误非常明显,但我不知道它可能来自哪里。

你有什么想法吗?

我当前的代码:

import * as pactum from 'pactum';
import { Test } from '@nestjs/testing';
import { AppModule } from '../src/app.module';
import { INestApplication, ValidationPipe } from '@nestjs/common';
import { PrismaService } from '../src/prisma/prisma.service';
import { AuthDto } from '../src/auth/dto';

describe('App e2e', () => {
  let app: INestApplication;
  let prisma: PrismaService;

  beforeAll(async () => {
    const moduleRef = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    const app = moduleRef.createNestApplication();
    app.useGlobalPipes(
      new ValidationPipe({
        whitelist: true,
      }),
    );
    await app.init();
    await app.listen(3334);

    prisma = app.get(PrismaService);
    await prisma.cleanDatabase();
  });

  afterAll(async () => {
    console.log('Closing server');
    await app.close(); // <------------- THE PROBLEM ARISES HERE.
  });

  describe('Auth', () => {
    describe('Signup', () => {
      it('should signup a user', () => {
        const dto: AuthDto = {
          email: 'darrel.doe@mail.com',
          password: '1234',
        };
        return pactum
          .spec()
          .post('http://localhost:3333/auth/signup')
          .withBody(dto)
          .expectStatus(201);
      });
    });
    describe('Signin', () => {
      it.todo('should signin a user');
    });
  });
});

您正在混合不同范围内的两个变量。

let app: INestApplication; 是您实际使用的上限范围,因为它没有分配任何值,所以它是 undefined。内部的是不同的,因为你在另一个范围内定义。

解决方法很简单,只需从const app = moduleRef.createNestApplication();

中删除const