如何使用 jest 测试 NestJS 解析器的返回类型行

问题描述 投票:0回答:1

我是 NestJS 的新手,正在尝试对我的文件进行单元测试,以获得良好的代码覆盖率起点。

我成功测试了应用程序中的所有内容,除了 auth.resolver.ts

这里是:

import { Resolver, Mutation, Args, Context } from '@nestjs/graphql';
import { ResellerAuthService } from './reseller-auth.service';
import { Response } from 'express';
import { UnauthorizedException } from '@nestjs/common';
import { LoginResellerInput } from './input/login-reseller.input';

@Resolver()
export class AuthResolver {
  constructor(private resellerAuthService: ResellerAuthService) {}

  @Mutation(() => Boolean)
  async loginReseller(
    @Args('loginResellerInput')
    loginResellerInput: LoginResellerInput,
    @Context() context: { res: Response },
  ): Promise<boolean> {
    const authenticated = await this.resellerAuthService.login(
      loginResellerInput,
      context.res,
    );

    if (!authenticated) {
      throw new UnauthorizedException();
    } else return true;
  }
}

而且我无法测试返回类型:

@Mutation(() => Boolean)

我尝试使用:

it('should have a mutation returning Boolean', () => {
  const returnType = Reflect.getMetadata('design:returntype', resolver.constructor.prototype, 'loginReseller');
  expect(returnType).toBe(Boolean);
});

但我知道登录时只有

[ 'graphql:resolver_type', 'graphql:resolver_name' ]
Reflect.getOwnMetadataKeys(resolver.loginReseller)

unit-testing nestjs
1个回答
0
投票

当我认为 100% 行覆盖率是一个值得努力的指标时,我发现我可以通过将方法提取到它们自己的变量来测试这些方法,这些变量可以在装饰器和测试中直接调用。类似的东西

export const ReturnsString = () => String;

有了这个,我现在可以做

@Field(ReturnsString)
并在测试中做类似
expect(ReturnsString()).toEqual(String)
的事情。

显然,这是一个非常荒谬的测试,它只是为了获得代码覆盖率,并没有真正测试任何东西。这种覆盖范围应该通过服务器的集成测试、模式的合同测试或服务器周围的一般开发工作来获得,因为如果它在开发中不起作用,那么它在产品中也不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.