Я хочу запустить несколько тестов 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();
})