Simula respuestas de tus APIs en tus proyectos de JavaScript utilizando MSWJS.
Al desarrollar aplicaciones web, a menudo es necesario interactuar con APIs para intercambiar datos. Sin embargo, durante la etapa de desarrollo, no siempre se dispone de un backend funcional. Para resolverlo, se puede hacer mocking de la API, lo que permite simular respuestas del servidor sin depender de un entorno real. En este artículo, exploraremos qué es MSWJS, para qué sirve y cómo implementarlo con ejemplos en un proyecto JavaScript.
MSWJS (Mock Service Worker) es una librería que hace precisamente esto, interceptar las peticiones de red en el navegador y devolver respuestas simuladas. Con ella, puedes:
Esta herramienta es especialmente útil cuando no se quiere conectar directamente con el backend, ya sea porqué aún está en desarrollo o porqué no se quiere conectar directamente con un entorno de producción. O simplemente para evaluar cómo responde la aplicación ante distintos estados de la API.
Simular respuestas de una API en la etapa de desarrollo tiene varias ventajas:
Con una herramienta como MSWJS, el proceso de desarrollo se vuelve más ágil, reduce dependencias, permite detectar errores antes de llegar a producción y probar con distintas respuestas si salir del entorno local.
Para el ejemplo de integración podemos usar cualquier framework. Usaremos Vue y Vite porqué se ve claramente los pasos a seguir, pero sirve para cualquier otro framework.
npm create vite@latest vue-msw --template vuecd vue-mswnpm install
Axios servirá para hacer peticiones get
, aunque también podríamos usar el método nativo fetch()
:
npm install axiosnpm install msw@latest --save-dev
Para que el service worker funcione correctamente, necesitamos copiar el archivo mockServiceWorker.js
en el directorio public/
de nuestro proyecto. Ejecutamos:
npx msw init public/ --save
Este comando también modificará el package.json
"msw": { "workerDirectory": [ "public" ]}
y generará el archivo en public/mockServiceWorker.js
, que será utilizado por el navegador para interceptar las peticiones en un Service Worker.
Ahora organizamos la configuración en la carpeta mocks
.
mkdir src/mocks
Dentro de esta carpeta, creamos:
src/mocks/handlers.js
(definición de las respuestas simuladas)src/mocks/browser.js
(configuración del worker en el navegador)Aquí añadiremos el endpoint
o ruta a reemplazar por la respuesta que queramos. En este caso toda petición get
que contenga /api/users
devolveremos una respuesta propia:
import { http } from 'msw';
export const handlers = [ http.get('/api/users', () => { return HttpResponse.json([ ]) }),];
Archivo de configuración del worker.
import { setupWorker } from 'msw/browser'import { handlers } from './handlers';
// Creamos un worker con los handlers definidosexport const worker = setupWorker(...handlers);
Configuramos Vue para que al cargar inicie el serviceWorker.
import { createApp } from 'vue';import App from './App.vue';
if (import.meta.env.MODE === 'development') { import('./mocks/browser') .then(({ worker }) => worker.start())}
createApp(App).mount('#app');
En App.vue
reemplazamos el componente por uno propio para que haga una petición get
a la api. Es el ejemplo que mostraremos por pantalla:
<script setup>import { ref, onMounted } from 'vue';import axios from 'axios';
const users = ref([]);
onMounted(async () => { try { const response = await axios.get('/api/users'); users.value = response.data; } catch (error) { console.error('Error al obtener usuarios:', error); }});</script>
<template> <div> <h1>Usuarios Mockeados</h1> <ul> <li v-for="user in users" :key="user.id"> {{ user.name }} - {{ user.email }} </li> </ul> </div></template>
Ahorar ya podemos iniciar el servidor con el comando npm run dev
. Si todo ha ido bien, podemos acceder a http://localhost:5173/
y ver una lista con los usuarios mockeados.
Además si abrimos la consola de Chrome veremos el mensaje [MSW] Mocking enabled.
.
El API mocking es una práctica muy útil en el desarrollo de aplicaciones web, ya que permite simular la interacción con un backend. MSWJS ofrece una forma sencilla de interceptar peticiones y devolver respuestas personalizadas, facilitando el trabajo en el entorno de desarrollo y permitiendo probar distintos escenarios sin depender de un servidor real. Integrar MSWJS en tu flujo de trabajo puede ayudarte a mejorar el control de pruebas y a detectar errores antes de que se conviertan en problemas en producción.