javascript - 在 NestJS 中测试解析器

标签 javascript node.js typescript jestjs nestjs

这是 NestJs 中的 resolver 示例,我即将为此文件编写测试。但是nestjs文档中没有测试解析器的文档。

我已经对我的服务进行了测试,但解析器内部也可能几乎没有逻辑,因此最好也对它们进行测试。

如何测试 resolver 文件?

import { ObjectId } from 'mongodb';
import { AuthGuard } from '../utils/Auth.guards';
import { UseGuards } from '@nestjs/common';
import { IUser } from '../users/users.service';
import { User } from '../utils/user.decorator';
import { Query, Resolver, Mutation, Args } from '@nestjs/graphql';
import { AccessService } from './access.service';
import { NeedAccess } from '../utils/needAccess.decorator';
import { HasAccess } from '../utils/access.decorator';

@Resolver('Accesss')
@UseGuards(AuthGuard)
export class AccessResolvers {
  constructor(private readonly accessService: AccessService) {}

  @Query()
  @NeedAccess()
  access(
    @Args('userId') userId: ObjectId,
    @User() user: IUser,
    @HasAccess(['access.view']) hasAccess,
  ) {
    if (userId && hasAccess) { // this might be a situation to concern about in tests
      return this.accessService.getUserAccess(userId);
    } else {
      return this.accessService.getUserAccess(user._id);
    }
  }

}

最佳答案

单元测试和 e2e 测试之间存在根本区别。在单元测试中,您想要测试单个独立单元的每个极端情况,在 e2e 测试中,您需要测试单元之间的交互。两者都很重要,请参阅this answer更详细的区别。

当您编写单元测试时,您通常会模拟单元的所有依赖项;对于您的 AccessResolvers 来说,您需要测试 AccessService,然后测试每个公共(public)方法。有关如何使用模拟的详细示例,请参阅 this answer (解析器没有区别)。

关于javascript - 在 NestJS 中测试解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55578780/

相关文章:

javascript - 我怎样才能实现继承链?

node.js - 使用express-session时req.session未定义

javascript - 用于使用环视删除空行的正则表达式

typescript - 映射类型和泛型函数输入错误

javascript - react native : I have a question with this React

javascript - 如何在 PHP 中调用 JavaScript 函数?

javascript - 让悬停功能出现在所有 100 个 div 中

javascript - 使用 Spring Boot 构建短信和视频通话应用程序

javascript - Node JS Passport Google OAuth 未进行身份验证

CSS 模块和悬停 CSS 无法正常工作