- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
尝试进行单元测试。出现以下错误:
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/
我在使用 nestjs 和 TypeORM 开发的服务中遇到问题 系统使用 docker 运行,在我的电脑上一切正常,但当我在任何其他端运行时它停止工作。 错误说: TypeError: Cannot
在nestjs中,我明白 imports: [ TypeOrmModule.forFeature([TaskRepository]), ], 创建某种提供者 token ,以便我可以使用此 t
尝试进行单元测试。出现以下错误: TypeError: Cannot read property 'prototype' of undefined export class UserService {
我是一名优秀的程序员,十分优秀!