【问题标题】:Test resolvers in NestJS在 NestJS 中测试解析器
【发布时间】:2019-08-29 22:03:06
【问题描述】:

这是 NestJs 中resolver 的示例,我正要为这个文件编写测试。但是在 nestjs 文档中没有测试解析器的文档。

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

如何测试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 在这里可能是有益的。 :) @KimKern

标签: javascript node.js typescript jestjs nestjs


【解决方案1】:

单元测试和 e2e 测试之间存在根本区别。在单元测试中,您希望测试单个隔离单元的每个角落案例,在 e2e 测试中,您要测试单元之间的交互。两者都很重要,请参阅this answer 了解更详细的区别。

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

【讨论】:

  • 但是存储库和服务不一样。
  • 这只是我,或者看起来在“在您的 AccessResolvers 的 AccessService 的情况下,然后您测试每个公共方法”中有错字或缺少单词?
猜你喜欢
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 2020-05-16
  • 2018-05-09
  • 2020-10-30
  • 2017-03-30
  • 2018-11-03
  • 2012-08-08
相关资源
最近更新 更多