0

我有一个配置了 TypeORM 的 NestJS 项目。e2e 测试是由 CLI 生成的测试:

import { Test, TestingModule } from '@nestjs/testing';
import { 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(200)
      .expect('Hello World!');
  });
});

我得到的错误如下:

    RepositoryNotFoundError: No repository for "Question" was found. Looks like this entity is not registered in current "default" connection?

      at RepositoryNotFoundError.TypeORMError [as constructor] (../src/error/TypeORMError.ts:7:9)
      at new RepositoryNotFoundError (../src/error/RepositoryNotFoundError.ts:10:9)
      at EntityManager.Object.<anonymous>.EntityManager.getRepository (../src/entity-manager/EntityManager.ts:975:19)
      at Connection.Object.<anonymous>.Connection.getRepository (../src/connection/Connection.ts:354:29)
      at InstanceWrapper.useFactory [as metatype] (../node_modules/@nestjs/typeorm/dist/typeorm.providers.js:17:30)
      at TestingInjector.instantiateClass (../node_modules/@nestjs/core/injector/injector.js:304:55)
      at callback (../node_modules/@nestjs/core/injector/injector.js:48:41)
      at TestingInjector.resolveConstructorParams (../node_modules/@nestjs/core/injector/injector.js:124:24)
      at TestingInjector.loadInstance (../node_modules/@nestjs/core/injector/injector.js:52:9)

AppModule 的配置如下:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { QuestionsModule } from './questions/questions.module';
import { Connection, getConnectionOptions } from 'typeorm';

@Module({
  imports: [
    // docker run --name postgres_questions_answers -e POSTGRES_PASSWORD=postgres -e POSTGRES_USER=postgres -e POSTGRES_DB=dev_questions_answers -p 5432:5432 -d postgres
    TypeOrmModule.forRootAsync({
      useFactory: async () =>
        Object.assign(await getConnectionOptions(), {
          // FIXME: This is done so Jest e2e doesnt raise Cannot create a new connection named "default", because connection with such name already exist and it now has an active connection session.
          keepConnectionAlive: process.env.NODE_ENV === 'test',
        }),
    }),
    QuestionsModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {
  constructor(private connection: Connection) {}
}

像这样的 QuestionsModule:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { QuestionsService } from './questions.service';
import { QuestionsController } from './questions.controller';
import { Question } from '../entities/question.entity';

@Module({
  imports: [TypeOrmModule.forFeature([Question])],
  controllers: [QuestionsController],
  providers: [QuestionsService],
})
export class QuestionsModule {}

项目在开发和生产模式下运行良好,所以我想知道我在这里做错了什么?

4

0 回答 0