Mongoose.connection.db не определен в NestJS

Я хочу запустить несколько тестов e2e для своего приложения. Я хочу, чтобы моя база данных была очищена после выполнения всех тестовых случаев. Я использую Mongoose для интеграции с MongoDB. Проблема в том, что mongoose.connection.db не определен везде внутри моего приложения и тестовых файлов, поэтому я не могу использовать mongoose.connection.db.dropDatabase() в операторе AfterAll. Все работает отлично, я могу вставлять документы или удалять их, но не могу получить доступ к mongoose.connection.db. Ниже вы можете увидеть мою конфигурацию app.module для mongoose:

Ниже мой тестовый файл:

Есть примечание, что когда я это делаю

я могу удалить базу данных, и mongoose.connection.db будет определен и будет работать.

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: `.env.${process.env.NODE_ENV}`,
      load: [AppConfig]
    }),
    MongooseModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: (configService: ConfigService) => {
        return configService.get('database');
      },
      inject: [ConfigService]
    })
  ],
  controllers: [],
  providers: []
})
export class AppModule {}
describe('GroupsModule (e2e)', () => {

    let app: INestApplication;

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

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

    afterAll(done => {
        app.close();
        done();
    })

    describe('CreateGroups', () => {
        it('creates new group', async () => {
            return request(app.getHttpServer())
                .post('/groups')
                .set('Authorization', accessToken)
                .send({ name: 'group one' })
                .expect(201)
                .then(res => {
                    const { message, data } = res.body;
                    expect(message).toBeDefined();
                    expect(data.name).toEqual('group one');
                });
        });

        it('should throw BadRequest for duplicate name', async () => {
            return request(app.getHttpServer())
                .post('/groups')
                .set('Authorization', accessToken)
                .send({ name: 'group one' })
                .expect(400);
        })
    });
});
beforeAll(async () => {
        await mongoose.connect(AppConfig().database.uri);
        await mongoose.connection.db.dropDatabase();
})
Парфен
Вопрос задан7 января 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.