Tengo una función así:
invoke(token: string): Promise<IUserDto> { return new Promise((reject, resolve) => { // Tokens are generally passed in the header of the request // Due to security reasons. let jwtSecretKey = process.env.JWT_SECRET_KEY; try { const verified = jwt.verify(token, jwtSecretKey!); if(verified){ resolve(verified); }else{ // Access Denied reject(); } } catch (error) { // Access Denied reject(); } }); }Y estoy tratando de probarlo así:
it('Validate user token use case', async () => { let jwtSecretKey = process.env.JWT_SECRET_KEY; let userData: IUserDto = { id: 'testid', firstName: 'firstName', lastName: 'lastName', username: 'username', email: 'test@test.com', password: 'testpassword', birthDate: new Date('0'), reports: [ new Report('report_id', 'report data', 0) ] }; let token = jwt.sign(userData, jwtSecretKey!); let validateUserTokenUseCase = new ValidateUserTokenUseCase(); let validated: IUserDto | String = await validateUserTokenUseCase.invoke(token); expect(validated.id).toBe(userData.id); })No puedo hacer esto porque al rechazar la promesa en la función, no devuelve un objeto de IUserDto, devuelve cualquier cadena de error que puse en el rechazo.
He intentado definir el tipo de devolución como Promise<IUserDto | String> , pero mi IDE no lo detecta bien, no puedo ver, por ejemplo, validated.id cuando lo escribo en mi IDE, lo cual es molesto.
¿Hay alguna forma de rechazar este método sin definir el tipo de promesa como IUserDto | String ?