Hola, me llamo Miguel y hoy les traigo este nuevo artículo.
Escribir pruebas unitarias se ha convertido en una tarea diaria para un ingeniero de software. Hay varios propósitos de la prueba de unidad de escritura:
- Mejor experiencia y calidad del producto. Las empresas quieren lanzar productos con problemas menores.
- Ahorro de tiempo. Asegúrese de que la mejora desarrollada funcione como se esperaba, reduzca el juego
Ding-Dong
para que podamos reducir el tiempo de corrección de errores que el tiempo de operación. Por ejemplo:QA -> Dev -> QA -> Dev -> QA -> Implementación
. - Mejora la confianza del ingeniero. Si escribe pruebas unitarias, probablemente obtendrá más confianza a lo largo del proceso para cualquier cosa que haya desarrollado y lanzado.
Dado que las pruebas unitarias conducen a tantos beneficios, ¿por qué hay posibilidades de que las cosas salgan mal?Por ejemplo,
Gerente: Hola Tek Loon, hay algunos problemas en el ticket que trabajaste ayer. ¿Puedes echar un vistazo?
Yo: Claro. Lo investigaremos.
Yo (hablándome a mí mismo): Todas las pruebas unitarias pasaron ayer. ¿Por qué todavía se plantean cuestiones?
¿Le suena familiar esta situación? Me pasó muchas veces.
Por lo tanto, decidí averiguar qué puedo hacer mejor para reducir esta situación y mejorar mi productividad.
Escribir pruebas efectivas
Resultó que la prueba unitaria que escribí no fue efectiva en absoluto. Para ser precisos, las pruebas unitarias que escribí no eran lo suficientemente específicas. Veamos algunos ejemplos a continuación.
Imagina que tenemos un archivo llamado clientController
. Hay un getClient
función donde podemos recuperar la información del cliente.
// clientController.js exports.getClient = async (req, res, next) => { try { // Find Client from MongoDB const clientData = await Client.findOne({ client_id: req.user.user_id }); // Return if (clientData) { console.log('Return client:', clientData); return res.status(200).json({ data: clientData }); } console.error('Client Not Found'); return res.status(401).json({ errors: ['Client Not Found'] }); } catch (error) { return next(error); } };
A continuación se muestra el caso de prueba simple que escribiré para probar la función getClient
.
test('Return 200 when successfully received client information', async () => { const req = mockRequest(null, { user: { user_id: 1 } }); const res = mockResponse(); const next = mockNext(); await clientController.getClient(req, res, next); expect(res.status).toHaveBeenCalledWith(200); expect(res.json).toHaveBeenCalled(); });
Se aprobó el caso de prueba anterior. Sin embargo, este caso de prueba no eficaz porque no lo es específico suficiente. Acabo de validar
- Validamos que ser llamado
res.json
. Pero nunca sé qué regresó. ¿Se devuelve la información correcta del cliente?
Entonces, ¿qué necesita ser específico aquí entonces?
- Esperar el devolver la información del cliente es correcta.
Una prueba unitaria más específica se vería así.
test('Return 200 when successfully received client information', async () => { const req = mockRequest(null, { user: { user_id: 1 } }); const res = mockResponse(); const next = mockNext(); await clientController.getClient(req, res, next); const expectedResult = Client.findOne({ client_id: req.user.user_id }); expect(res.status).toHaveBeenCalledWith(200); // Now we ensure res.json only have been called once expect(res.json).toHaveBeenCalledTimes(1); // Now we ensure the res.json is returning object with data, and data contain the client information expect(res.json).toHaveBeenCalledWith({ data: expectedResult }); });
Con 2
líneas más de código. ahora la prueba unitaria se manejó de manera más específica y es una prueba unitaria efectiva.
Estos son los puntos clave de este artículo.
- Escribir pruebas unitarias no es suficiente, necesita escribir pruebas unitarias efectivas.
- Las pruebas unitarias efectivas siempre contribuyen con la especificidad. Lo que significa que cuanto más específico sea el resultado que espere, más efectivas y precisas serán sus pruebas unitarias.
Gracias por leer este artículo. Nos vemos en el próximo artículo.
Añadir comentario