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

编程入门 行业动态 更新时间:2024-10-03 17:17:52

如何在不使用类的情况下为模拟<a href=https://www.elefans.com/category/jswz/34/1771347.html style=控制器的 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 解析器创建单元测试

本文发布于:2024-05-31 06:02:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1771349.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:控制器   情况下   单元测试   如何在   graphl

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!