gpt4 book ai didi

typescript - NestJS TypeORM InjectRepository 无法读取未定义的属性 'prototype'

转载 作者:搜寻专家 更新时间:2023-10-30 21:11:40 25 4
gpt4 key购买 nike

尝试进行单元测试。出现以下错误:

TypeError: Cannot read property 'prototype' of undefined

export class UserService {

constructor(@InjectRepository(User) private readonly userRepository: Repository < User>) { }

规范:

describe('AuthController', () => {
let authController: AuthController;
let authService: AuthService;
let mockRepository = {

};
beforeEach(async () => {
const module = await Test.createTestingModule({
imports: [
TypeOrmModule.forFeature([User]),
],
controllers: [AuthController],
providers: [AuthService, {
provide: getRepositoryToken(User),
useValue: mockRepository
}]
}).compile()
authService = module.get<AuthService>(AuthService);
authController = module.get<AuthController>(AuthController)
});

有人可以分享解决方案吗?

更多信息:

看来 typeorm 有问题

beforeEach(async () => {
const module = await Test.createTestingModule({

}).compile()
authService = module.get<AuthService>(AuthService);
authController = module.get<AuthController>(AuthController)
});

使用这段代码,我得到了完全相同的错误。所以唯一的问题是将 typeorm 添加到这个测试模块。

所以失败是因为依赖:AuthController->AuthService->UserService->TypeORM

顺便说一句,刚刚使用 API 和 Postman 检查了 UserService,它工作正常。

仍然没有结果:

 module = await Test.createTestingModule({
controllers: [AuthController],
components: [
{
provide: AuthService,
useValue: {}
},
{
provide: UserService,
useValue: {}
},
{
provide: getRepositoryToken(User),
useValue: {}
}
],
providers: [
{
provide: AuthService,
useValue: {}
},
{
provide: UserService,
useValue: {}
},
{
provide: getRepositoryToken(User),
useValue: {}
}
]
}).compile()
this.authController = module.get<AuthController>(AuthController)

还有

class AuthServiceMock {
logIn(userName) {
return { id:100, isDeleted:false, login:"login", password:"password"};
}

signUp() {
return { expireIn: 3600, token:"token" };
}
}

describe('AuthController', () => {
let module: TestingModule;
let authController: AuthController;
let authService: AuthService;

beforeEach(async () => {
module = await Test.createTestingModule({
controllers: [AuthController],
components: [

],
providers: [
{
provide: AuthService,
useClass: AuthServiceMock
},
]
}).compile()
this.authController = module.get<AuthController>(AuthController)
});

最佳答案

我查看了您在 Kim Kern ( https://github.com/rankery/wof-server ) 下的评论中提供的项目

您正在使用桶文件 (src/user/index.ts),导出 UserModule

export * from './user.module';

我猜你稍后会使用这个桶文件来导入模块。

现在,每次导入桶文件的内容时,都会执行构建版本的 src/user/user.module.ts 中包含的代码,其中包括UserModule 类,这反过来会让 Typeorm 尝试构建一个 Repository,这会导致错误。

您应该从 src/user/index.ts 中删除此导出(或简单地删除该文件)并修复此删除导致的损坏的导入,它应该可以工作。

关于typescript - NestJS TypeORM InjectRepository 无法读取未定义的属性 'prototype',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55009830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com