控制器的 graphl 解析器创建单元测试"/>
如何在不使用类的情况下为模拟控制器的 graphl 解析器创建单元测试
我正在尝试使用依赖倒置概念和 inversify 创建一个 api。如果我有一个 graphl 解析器,它使用来自 inversify 容器的控制器,但是当用 jest 编写测试时,我无法模拟这个控制器,任何人都可以帮助我吗?
控制器:
import { inject, injectable } from "inversify";
import { User } from "./user.entitiy";
import { IUserService } from "./interface/IUser.service";
import { CreateUserDto } from "./interface/User.dto";
@injectable()
class UserController {
constructor(@inject('IUserService') private readonly userService: IUserService) {}
public async create(createUserDto: CreateUserDto): Promise<User> {
return await this.userService.create(createUserDto);
}
public async update(createUserDto: CreateUserDto): Promise<User> {
return await this.userService.update(createUserDto);
}
public async delete(userId: string): Promise<User> {
return await this.userService.delete(userId);
}
public async findById(userId: string): Promise<User> {
return await this.userService.findById(userId);
}
public async find(): Promise<User[]> {
return await this.userService.find();
}
}
export { UserController }
容器:
import { Container } from 'inversify';
import { IUserService } from './interface/IUser.service';
import { UserService } from './user.service';
import { IUserRepository } from './interface/IUser.repository';
import { UserRepository } from './user.repository';
import { UserController } from './user.controller';
import { PrismaClient } from '@prisma/client';
const UserContainer = new Container();
UserContainer.bind<PrismaClient>('PrismaClient').toConstantValue(new PrismaClient());
UserContainer.bind<IUserRepository>('IUserRepository').to(UserRepository);
UserContainer.bind<IUserService>('IUserService').to(UserService);
UserContainer.bind<UserController>(UserController).toSelf();
export { UserContainer }
解析器:
import { UserContainer } from "../user.container";
import { UserController } from "../user.controller";
let controller = UserContainer.resolve<UserController>(UserController);
const UserResolver = {
Query: {
findUser: (obj: any, args: any, context: any, info: any) => {
return controller.findById(args.userId);
},
findUsers: (obj: any, args: any, context: any, info: any) => {
return controller.find();
}
},
Mutation: {
createUser: (obj: any, args: any, context: any, info: any) => {
return controller.create(args.input);
},
updateUser: (obj: any, args: any, context: any, info: any) => {
return controller.update(args.input);
},
deleteUser: (obj: any, args: any, context: any, info: any) => {
return controller.delete(args.userId);
},
}
}
export { UserResolver };
我尝试将存储库创建为类,并使用 @inject 注入控制器以在测试时模拟它,但控制器始终未定义。
回答如下:更多推荐
如何在不使用类的情况下为模拟控制器的 graphl 解析器创建单元测试
发布评论