使用NestJs和Typeorm启动时e2e测试失败

使用NestJs和Typeorm启动时e2e测试失败,nestjs,e2e-testing,typeorm,Nestjs,E2e Testing,Typeorm,我使用NestJS框架和typeorm。使用数据库时,所有数据都会成功保存。连接没有问题。我尝试用Jest配置e2e测试。不幸的是,我有两个错误: 及 找不到“用户”的存储库。看起来此实体未在当前“默认”连接中注册 我试着用这个来设置testenv 我的文件: 应用e2e-spec.ts import { Test, TestingModule } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common';

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

找不到“用户”的存储库。看起来此实体未在当前“默认”连接中注册

我试着用这个来设置testenv

我的文件:

应用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!');
  });
});
@Module({
  imports: [
    ConfigModule,
    AuthModule,
    DrawModule,
    UserModule
    ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
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();
  });
});
@Module({
  controllers: [UserController],
  imports: [TypeOrmModule.forFeature([User])],
  providers: [UserService],
  exports: [UserService, TypeOrmModule],
})
export class UserModule {
}
@Module({
  imports: [
    NestConfigModule.forRoot({
      isGlobal: true,
      load: [configuration]
    }),
    TypeOrmModule.forRoot(process.env.NODE_ENV === 'production' ? {...configProd} : {...configDev} )
  ],
})
export class ConfigModule {
}
user.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!');
  });
});
@Module({
  imports: [
    ConfigModule,
    AuthModule,
    DrawModule,
    UserModule
    ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
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();
  });
});
@Module({
  controllers: [UserController],
  imports: [TypeOrmModule.forFeature([User])],
  providers: [UserService],
  exports: [UserService, TypeOrmModule],
})
export class UserModule {
}
@Module({
  imports: [
    NestConfigModule.forRoot({
      isGlobal: true,
      load: [configuration]
    }),
    TypeOrmModule.forRoot(process.env.NODE_ENV === 'production' ? {...configProd} : {...configDev} )
  ],
})
export class ConfigModule {
}
配置模块.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!');
  });
});
@Module({
  imports: [
    ConfigModule,
    AuthModule,
    DrawModule,
    UserModule
    ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
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();
  });
});
@Module({
  controllers: [UserController],
  imports: [TypeOrmModule.forFeature([User])],
  providers: [UserService],
  exports: [UserService, TypeOrmModule],
})
export class UserModule {
}
@Module({
  imports: [
    NestConfigModule.forRoot({
      isGlobal: true,
      load: [configuration]
    }),
    TypeOrmModule.forRoot(process.env.NODE_ENV === 'production' ? {...configProd} : {...configDev} )
  ],
})
export class ConfigModule {
}

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

问题在于,当您启动应用程序时,基本目录为“dist”,而当您启动“e2e”测试时,基本目录为“src”

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

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

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

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

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

类似的问题发生在mongodb/mongodb内存服务器上类似的问题发生在mongodb/mongodb内存服务器上