Vitests nos permite realizar pruebas sobre Axios y nuestras llamadas remotas REST. Hoy vamos a aprender a crear pruebas e2e con React.
Supongamos que tenemos un servicio que gestiona la creación, obtención y eliminación de artículos (ArticleService
).
1. Preparación del Proyecto
Instalación de Dependencias
Primero, instala las dependencias necesarias si aún no lo has hecho:
npm install vitest axios axios-mock-adapter
2. Definición del Servicio
Crear el archivo services/articleService.ts
Define un servicio para manejar los artículos:
// services/articleService.ts import { AxiosInstance, AxiosResponse } from 'axios'; interface Article { id: string; title: string; content: string; } export default class ArticleService { private axiosInstance: AxiosInstance; constructor(axiosInstance: AxiosInstance) { this.axiosInstance = axiosInstance; } // Obtener todos los artículos public async getArticles(): Promise<AxiosResponse<Article[]>> { try { const response: AxiosResponse<Article[]> = await this.axiosInstance.get('/articles'); return response; } catch (error: any) { throw new Error(error.message); } } // Crear un nuevo artículo public async createArticle(article: Article): Promise<AxiosResponse<Article>> { try { const response: AxiosResponse<Article> = await this.axiosInstance.post('/articles', article); return response; } catch (error: any) { throw new Error(error.message); } } // Eliminar un artículo public async deleteArticle(articleId: string): Promise<AxiosResponse<void>> { try { const response: AxiosResponse<void> = await this.axiosInstance.delete(`/articles/${articleId}`); return response; } catch (error: any) { throw new Error(error.message); } } }
3. Creación de Pruebas E2E
Crear el archivo de prueba ArticleService.test.ts
Ahora, crea un archivo de prueba para ArticleService
:
// tests/ArticleService.test.ts import { describe, it, expect, beforeEach } from 'vitest'; import axios from 'axios'; import MockAdapter from 'axios-mock-adapter'; import ArticleService from '../services/articleService'; describe('ArticleService E2E tests', () => { let mock: MockAdapter; let articleService: ArticleService; beforeEach(() => { mock = new MockAdapter(axios); articleService = new ArticleService(axios); }); it('should fetch articles correctly', async () => { const mockResponse = [ { id: '1', title: 'Article 1', content: 'Content of article 1' }, { id: '2', title: 'Article 2', content: 'Content of article 2' }, ]; mock.onGet('/articles').reply(200, mockResponse); const response = await articleService.getArticles(); expect(response.status).toBe(200); expect(response.data).toEqual(mockResponse); }); it('should create an article correctly', async () => { const newArticle = { id: '3', title: 'Article 3', content: 'Content of article 3' }; mock.onPost('/articles').reply(201, newArticle); const response = await articleService.createArticle(newArticle); expect(response.status).toBe(201); expect(response.data).toEqual(newArticle); }); it('should delete an article correctly', async () => { const articleId = '1'; mock.onDelete(`/articles/${articleId}`).reply(204); const response = await articleService.deleteArticle(articleId); expect(response.status).toBe(204); }); });
4. Ejecutar las Pruebas
Ejecuta tus pruebas utilizando el comando de Vitest:
npx vitest run
Explicación del Código
- Configuración Inicial:
MockAdapter
se utiliza para interceptar y simular respuestas HTTP.beforeEach
asegura que cada prueba tenga una configuración limpia.articleService
se instancia conaxios
.- Pruebas Individuales:
getArticles
: Simula una respuesta de la API con una lista de artículos y verifica que el métodogetArticles
maneje correctamente la respuesta.createArticle
: Simula la creación de un artículo y verifica que el métodocreateArticle
maneje correctamente la respuesta.deleteArticle
: Simula la eliminación de un artículo y verifica que el métododeleteArticle
maneje correctamente la respuesta.
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.