最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何在不使用类的情况下为模拟控制器的 graphl 解析器创建单元测试

网站源码admin35浏览0评论

如何在不使用类的情况下为模拟控制器的 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 注入控制器以在测试时模拟它,但控制器始终未定义。

回答如下:
发布评论

评论列表(0)

  1. 暂无评论