【问题标题】:e2e test fail on startup using NestJs and Typeorm使用 NestJs 和 Typeorm 启动时 e2e 测试失败
【发布时间】:2021-03-02 22:41:25
【问题描述】:

我使用 NestJS 框架和 typeorm。使用数据库时,所有数据都已成功保存。连接没有问题。我尝试使用 Jest 配置 e2e 测试。不幸的是,我遇到了 2 个错误:

TypeError: Cannot read property 'getHttpServer' of undefined

找不到“用户”的存储库。看起来这个实体没有在当前的“默认”连接中注册?

我尝试使用 tutorial 设置测试环境。

我的文件:

app.e2e-spec.ts

import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from '../src/app.module';
import { TypeOrmModule } from '@nestjs/typeorm';

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

  beforeAll(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [
        AppModule,
        TypeOrmModule.forRoot({
          'type': 'mssql',
          'host': 'localhost',
          'port': 1433,
          'username': 'gift_draw_db',
          'password': '',
          'database': 'gift_draw_local',
          'entities': ['./**/*.entity.ts'],
          'synchronize': false,
        }),
      ],
      providers: [],
    }).compile();

    app = moduleFixture.createNestApplication();
    console.error(process.env.DB_DATABASE_NAME, '<------------------------------'); // NEVER SEEN THIS
    await app.init();
  });

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

  it('/api/ (GET)', async () => {
    return request(app.getHttpServer()) // 1st error
      .get('/api/')
      .expect(200)
      .expect('Working!');
  });
});

app.module.ts

@Module({
  imports: [
    ConfigModule,
    AuthModule,
    DrawModule,
    UserModule
    ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

user.e2e-spec.ts

describe('User', () => {
  let app: INestApplication;
  let repository: Repository<User>;

  beforeAll(async () => {
    const module = await Test.createTestingModule({
      imports: [
        UserModule,
        TypeOrmModule.forRoot({
          'type': 'mssql',
          'host': 'localhost',
          'port': 1433,
          'username': 'gift_draw_db',
          'password': '',
          'database': 'gift_draw_local',
          'entities': ['./**/*.entity.ts'],
          'synchronize': false,
        }),
      ],
    }).compile();

    app = module.createNestApplication();

    repository = module.get('UserRepository');
    await app.init();
  });

  afterEach(async () => {
    await repository.query(`DELETE FROM users;`);
  });

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

user.module.ts

@Module({
  controllers: [UserController],
  imports: [TypeOrmModule.forFeature([User])],
  providers: [UserService],
  exports: [UserService, TypeOrmModule],
})
export class UserModule {
}

config.module.ts

@Module({
  imports: [
    NestConfigModule.forRoot({
      isGlobal: true,
      load: [configuration]
    }),
    TypeOrmModule.forRoot(process.env.NODE_ENV === 'production' ? {...configProd} : {...configDev} )
  ],
})
export class ConfigModule {
}

ConfigModule 具有与测试相同的凭据。

【问题讨论】:

  • 类似的问题发生在 mongodb / mongodb-memory-sever

标签: nestjs e2e-testing typeorm


【解决方案1】:

问题是当您启动应用程序时,基本目录是“dist”,而当您启动它以进行“e2e”测试时,基本目录是“src”。

您可以将实体定义更改为类似于以下内容:

entities: [__dirname + '/../**/*.entity.ts']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 2020-05-12
    • 2021-05-17
    • 1970-01-01
    • 2020-11-16
    • 2020-10-28
    • 2021-02-24
    相关资源
    最近更新 更多