Tengo el siguiente archivo en nestjs. Se están pasando casos de prueba para este código. pero se avecina un problema de cobertura, por lo que la canalización falló.
import { Injectable, CanActivate, ExecutionContext, Logger } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { ROLES_KEY } from './roles.decorator'; import { Role } from './role.enum'; @Injectable() export class RolesGuard implements CanActivate { constructor(private reflector: Reflector) {} canActivate(context: ExecutionContext): boolean { const requiredRoles = this.reflector.getAllAndOverride<string[]>(ROLES_KEY, [ context.getHandler(), context.getClass(), ]); const { user } = context.switchToHttp().getRequest(); if (!user.role) { Logger.error('User does not have a role set'); return false; } if (user.role === Role.Admin) { return true; } if (!Array.isArray(requiredRoles) || !requiredRoles.length) { // No @Roles() decorator set, deny access as not admin return false; } if (requiredRoles.includes(Role.All)) { return true; } return requiredRoles.includes(user.role); } }Estoy escribiendo debajo del archivo de caso de prueba para ello.
import { createMock } from '@golevelup/ts-jest'; import { ExecutionContext } from "@nestjs/common"; import { Reflector } from "@nestjs/core"; import { RolesGuard } from "./roles.guard"; describe('RolesGuard', () => { let guard: RolesGuard; let reflector: Reflector; beforeEach(() => { reflector = new Reflector(); guard = new RolesGuard(reflector); }); it('should be defined', () => { expect(guard).toBeDefined(); }); it('should return false if user does not exist', () => { reflector.getAllAndOverride = jest.fn().mockReturnValue(true); const context = createMock<ExecutionContext>(); const canActivate = guard.canActivate(context); expect(canActivate).toBe(false); }) })pero la cobertura no se muestra para la línea de abajo
if (user.role === Role.Admin) { return true; } if (!Array.isArray(requiredRoles) || !requiredRoles.length) { // No @Roles() decorator set, deny access as not admin return false; } if (requiredRoles.includes(Role.All)) { return true; } return requiredRoles.includes(user.role);¿podría ayudarme en lo mismo? No soy capaz de entender cómo manejar la cobertura de estas líneas. Estoy invocando el método pero aún se muestra.
También hice un caso de prueba de pregunta similar para el archivo de protección de roles en nestjs