使用NestJs和Typeorm启动时e2e测试失败
我使用NestJS框架和typeorm。使用数据库时,所有数据都会成功保存。连接没有问题。我尝试用Jest配置e2e测试。不幸的是,我有两个错误: 及 找不到“用户”的存储库。看起来此实体未在当前“默认”连接中注册 我试着用这个来设置testenv 我的文件: 应用e2e-spec.ts使用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';
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内存服务器上