Tengo una clase MyCar que tiene una función, digamos getAllCars() .
export default class MyCar { function getAllCars(){ try { /** * logic and query to dynamodb database to get all cars * These Car objects will be fetched from db. */ const result = [Car, Car, Car, Car]; return result; catch (error) { if(error.code === 'ValidationException') { throw error; } } } } Esta función tiene lógica para consultar la tabla dynamodb y devolver una respuesta paginada. En uno de los escenarios, dynamodb lanza una ValidationException . Esta excepción es capturada por el bloque catch(). Quiero simular esta ValidationException en mi caso de prueba de unidad para que, si ocurre esta excepción, pueda devolver un mensaje de error personalizado.
El objeto de excepción devuelto es este,
{ "message": "The provided starting key does not match the range key predicate", "code": "ValidationException", "time": {}, "requestId": "xxxx-xxxx-xxxx-xxxx-xxxx", "statusCode": 400, }Lo que he hecho por ahora es esto,
jest.spyOn(MyCar.prototype, 'getAllCars') .mockImplementation(() => { throw { code: 'ValidationException' }; });y mi expectativa está por debajo,
expect(async () => { return myCar.getAllCars() }).rejects.toHaveProperty('code', 'ValidationException'); Lo que quiero hacer es, en lugar de lanzar el objeto { code: 'ValidationException' } en la implementación simulada(), quiero lanzar la ValidationException real de dynamodb. ¿Hay alguna forma en que pueda hacerlo?
Para otras excepciones, como ItemNotFoundException , puedo importarlas directamente desde @aws/dynamodb-data-mapper . Algo como esto,
import { ItemNotFoundException } from '@aws/dynamodb-data-mapper'; jest.spyOn(MyCar.prototype, 'getAllCars') .mockImplementation(() => { throw ItemNotFoundException; });Sería ideal si pudiera importar la excepción y simularla o encontrar algún paquete que me permitiera hacerlo.
Aquí hay un enlace de Excepciones para el manejo de errores de dynamodb con DynamoDB