Tengo el siguiente método en mi controlador. ¿Cómo puedo probarlo? La cobertura de la anotación está fallando. En realidad, no puedo definir el código para la cobertura en el archivo jest.
¿Qué parámetro debo agregar en mi archivo de prueba y pasar para cubrirlo?
@Post('upload') @UseInterceptors( FileInterceptor('image', { storage: diskStorage({ destination: './uploads', filename(_, file, callback) { const randomName = Array(32) .fill(null) .map(() => Math.round(Math.random() * 16).toString(16)) .join(''); return callback(null, `${randomName}${extname(file.originalname)}`); }, }), }) ) uploadFile(@UploadedFile() file) { return { url: `http://localhost:2300/api/inventory/uploads/${file.filename}`, originalFileName: `${file.originalname}`, }; }Está funcionando perfectamente. Escribí este caso de prueba de broma para lo mismo.
it('Single file upload', async () => { const response = await controller.uploadFile(mockFile); const fileService = new InventoryController(service); expect(response).toBeTruthy(); expect(response).toStrictEqual( expect.objectContaining({ originalFileName: expect.any(String), url: expect.any(String), }), ); });Esto es exitoso pero la cobertura está fallando para esta línea.
@UseInterceptors( FileInterceptor('image', { storage: diskStorage({ destination: './uploads', filename(_, file, callback) { const randomName = Array(32) .fill(null) .map(() => Math.round(Math.random() * 16).toString(16)) .join(''); return callback(null, `${randomName}${extname(file.originalname)}`); }, }), }) )Lo que haría aquí si la cobertura de código es una necesidad absoluta en todas las líneas con pruebas unitarias, es mover la función de nombre de filename a un archivo separado que exporte el método para que pueda probarse directamente.
Durante las pruebas unitarias, los potenciadores no se llaman, solo se crean, por lo que no obtendrá ninguna otra cobertura que no sea el tipo de cobertura inicial "sí, este decorador funciona". Para esta devolución de llamada interna, necesitará una función separada.
La otra opción, si la cobertura de código no es una métrica tan importante, sería probar esto en una prueba e2e. De esa manera, sabrá con certeza que esto funciona según lo previsto.