¿Qué es un mock?
- Tu app le pide datos a una API
- Cuando una app muestra productos, le pide la información a una API: un servidor que responde con datos. A veces esa API todavía no existe, está caída o no conviene tocar la de verdad mientras pruebas.
- Un mock responde en su lugar
- Es una API de mentiras que contesta lo que tú decides. Tu app le habla igual que a la real y no nota la diferencia.
- Mockix los crea en tu equipo
- Sin servidores ni cuentas: los mocks corren en tu computadora y se guardan como archivos en una carpeta tuya.
Instala y crea el ejemplo
- Descarga el instalador desde la página de Mockix y ábrelo. Si Windows muestra «Windows protegió tu PC», elige «Más información» y «Ejecutar de todas formas»: aparece porque el instalador aún no está firmado.
- Abre Mockix y pulsa Crear el ejemplo….
- Elige una carpeta vacía, por ejemplo
Documentos\mi-primer-mock.
Mockix crea ahí un mock llamado tienda: la API de una tienda de café con productos, pedidos e inventario.
Enciéndelo y pruébalo
- En la barra de la izquierda, haz clic en tienda y pulsa Iniciar. El estado cambia a «En marcha» y aparece su dirección.
- Abre esta dirección en tu navegador:
http://127.0.0.1:3000/v1/productos/prd_7Qm2
{
"id": "prd_7Qm2",
"nombre": "Café de Veracruz 500 g",
"precio": 189,
"moneda": "MXN",
"activo": true
}
Prueba también /v1/productos, que da la lista, y /v1/productos/999, que responde un error 404. Cada petición aparece en el Log en vivo con lo que respondió y cuánto tardó.
Cambia una respuesta
- En la barra de la izquierda, dentro de productos, abre la ruta GET /productos/:id.
- En la respuesta ok, cambia
"activo": truepor"activo": false. - Pulsa Guardar o Ctrl S y recarga el navegador.
La respuesta ya dice false. Mockix aplica cada cambio al momento, sin reiniciar nada. El :id de la ruta es la parte que cambia en cada petición.
Crea el mock desde tu contrato
- Pulsa Nuevo mock (en un workspace vacío, Crear mock desde un contrato) y deja elegida la opción Desde un contrato OpenAPI.
- Pulsa Elegir contrato… y elige el
.yamlo.jsonde tu API. Mockix propone nombre, puerto y prefijo; cámbialos si quieres. - Pulsa Crear mock, luego Iniciar, y cambia en tu app la dirección de la API por la del mock.
Del contrato salen las rutas con todas sus respuestas, el contrato conectado para revisar cada petición, datos con CRUD para los recursos que se listan y se leen por id, escenarios cuando hay un campo de estado con acciones que lo cambian, y tres perfiles de caos con sus errores, apagados. El informe dice qué creó y qué no pudo deducir.
Pide cualquier respuesta
Si el contrato documenta un 404 o un 500, el mock te lo da cuando lo pides, para probar cómo reacciona tu app a cada error:
- En el navegador, añade
?mockix_respuesta=404a la dirección. - Desde tu app o PowerShell, manda la cabecera
X-Mockix-Respuesta:Invoke-RestMethod -Method Post http://127.0.0.1:3001/v1/pedidos -Headers @{ "X-Mockix-Respuesta" = "500" }
Sin eso responde la respuesta normal. Si tu contrato solo tiene acciones (todo POST), quedan las rutas con todas sus respuestas para elegir. Un Swagger 2.0 también se conecta: Mockix lo convierte a OpenAPI 3 y tu archivo no cambia.
¿Tienes una colección de Postman o Sendix, un HAR o un entorno de Mockoon? Usa el icono Importar. ¿Prefieres empezar de cero? En Nuevo mock elige Vacío.
Más funciones, paso a paso
- Para acercarte a una API de verdad
- Grabaciones, escenarios, perfiles de caos y contratos. Cada uno se abre desde los iconos de la columna izquierda de la ventana.
- Con el ejemplo encendido
- Todos los pasos usan el mock tienda, así que mantenlo en marcha mientras pruebas.
Grabaciones
Si la API real ya existe, Mockix la copia: se pone en medio, deja pasar tus peticiones, guarda lo que responde y lo convierte en un mock. Pruébalo grabando la propia tienda:
- Abre Grabaciones. Arriba verás
localhost:4100 → https://; a la derecha de la flecha escribehttp://127.0.0.1:3000/v1y pulsa Grabar. - Abre
http://localhost:4100/productos/prd_7Qm2y luego…/productos/prd_8Lx4. Usa el puerto 4100, el del intermediario. - Pulsa Detener. En Rutas detectadas ya aparece
GET /productos/:id. Ponle nombre y pulsa Convertir en mocks.
Con una API real pones su dirección en el paso 1 y en tu app usas http://localhost:4100 mientras grabas. Las contraseñas, tokens y cookies no pasan al mock.
Escenarios
Una API real recuerda cosas: un pedido está «creado», al pagarlo pasa a «pagado» y luego a «enviado». Pruébalo con el pedido del ejemplo:
- Abre
http://127.0.0.1:3000/v1/pedidos/ped_1: dice"estado": "creado". - Págalo desde PowerShell, porque es un POST:
Invoke-RestMethod -Method Post http://127.0.0.1:3000/v1/pedidos/ped_1/pago - Ábrelo otra vez:
"pagado". Espera 10 segundos:"enviado", con número de guía. - Abre Escenarios: el diagrama marca el estado de
ped_1y qué lo hizo avanzar. Reiniciar instancias vuelve a empezar.
key: params.id # un estado por cada pedido
initial: creado
states: [creado, pagado, enviado, entregado, cancelado]
transitions:
- { from: creado, to: pagado, on: { method: POST, path: /pedidos/:id/pago } }
- { from: pagado, to: enviado, after: 10s }
Es el archivo mocks/tienda/scenarios/pedido.yaml; la ruta GET /pedidos/:id responde según el estado.
Perfiles de caos
La red a veces va lenta o la API falla. Con un perfil de caos compruebas que tu app lo aguanta.
- Abre Perfiles de caos y elige red-3g, un celular lento. La gráfica muestra latencia y errores en el tiempo.
- En Dónde se aplica, elige
red-3gen la lista del mock tienda. - Abre
…/v1/productos: tarda un tercio de segundo o más. Efectos aplicados dice qué recibió cada petición, como+391 ms.
Con red-inestable verás errores 500 y 503 a los 30 segundos. Arrastra los puntos de la curva y pulsa Aplicar cambios para hacer el tuyo; «sin caos» lo quita.
Contratos
Un contrato es la especificación oficial de tu API. Con él, Mockix revisa cada petición y te avisa si tu app manda algo que la API real rechazaría.
Cómo debe ser: un archivo OpenAPI 3.0 o 3.1 en la carpeta contracts/, con cada ruta, lo que recibe y lo que devuelve, con sus tipos y campos obligatorios. El prefijo va en servers y las rutas sin él. Si ya tienes tu API documentada en Swagger u OpenAPI, ese archivo sirve tal cual. Se conecta en el mock.yaml:
contract:
file: contracts/tienda.openapi.yaml
mode: warn # off · warn: avisa · strict: responde 400
- El ejemplo ya lo trae. Manda un precio como texto:
Invoke-RestMethod -Method Post http://127.0.0.1:3000/v1/productos -ContentType application/json -Body '{"nombre":"Taza","precio":"caro"}'(PowerShell lo muestra en rojo: es el error esperado). - Abre Contratos: verás
body.precio debe ser number (recibido "caro", un string). - Cambia a Estricto y repite: responde un 400 «La petición no cumple el contrato».
Palabras que vas a ver
- Workspace
- La carpeta donde guardas tus mocks. Es la que abres en Mockix.
- Mock
- Una API de mentiras, con su dirección y su puerto.
- Ruta
- Una dirección del mock, como
GET /productos/:id. Lo que va después de los dos puntos cambia en cada petición. - Respuesta
- Lo que devuelve una ruta. Una ruta puede tener varias y elegir una según la petición, como el 404 para los productos que no existen.
- Puerto
- El número al final de la dirección, como
3000. Cada mock usa el suyo.
Si algo falla
- «Esa carpeta es el mock «x», no un workspace»
- Abriste una carpeta de más adentro. Abre la que indica el mensaje, la que contiene la carpeta
mocks. - El mock queda «Con errores» y dice PORT_IN_USE
- Otro programa usa el puerto 3000. Abre
mocks\tienda\mock.yamlcon el Bloc de notas, cambiaport: 3000por otro número, como3001, guarda y pulsa Iniciar otra vez. - El navegador no puede conectar
- El mock está apagado. Selecciónalo y pulsa Iniciar.
- Quiero borrar un mock
- Selecciónalo y pulsa Mover el mock a la papelera, debajo de sus datos. Se detiene y su carpeta va a la papelera de Windows, de donde la puedes recuperar.
- Aparece «No route in this mock»
- La dirección no coincide con ninguna ruta. Revisa que lleve el prefijo
/v1y que el método sea el correcto.