Simulacro · pair coding de 1 hora
Un proyecto Node + TypeScript con una API falsa, un dominio incompleto y 36 pruebas en rojo. Es el escenario más probable del viernes: llegar a un repositorio ajeno, entender qué falta y completarlo conversando.
Sin dependencias externas: el cliente de API es falso y determinista.
tar -xzf simulacro-smartly.tar.gz cd simulacro-smartly pnpm install && pnpm test # 36 en rojo. Eso es el punto de partida.
Y cuando ya lo tengas, para comparar con la referencia:
pnpm test:solucion # 36 en verde, sin tocar tu código pnpm test:caos:10 # 10 semillas distintas, todo verde
En la entrevista real esto decide si llegas con tiempo al código. Practícalo tal cual:
package.json y tsconfig (1 min). Cómo se corre y qué tan estricto es. Aquí está activo strict con noUncheckedIndexedAccess y exactOptionalPropertyTypes.pnpm test y lee los nombres de las pruebas, no el código.
Si una prueba se llama lanza error con formato de gasto desconocido, ya sabes que hay
que validar y lanzar. Eso te ahorra veinte minutos de adivinar y es exactamente lo que un senior
hace primero en un repo ajeno.
| Fase | Minutos | Qué haces |
|---|---|---|
| 1 · Lectura | 10–12 | README, estructura, suite en rojo, el test más pequeño. Sin escribir código. |
| 2 · Iteración | 35–38 | Una prueba a la vez. Ejecutar. La siguiente. Hablando. |
| 3 · Refactor | 10 | Bordes, errores de la API, qué se rompe a 10×, qué cambiarías. |
| Función | Pruebas | Qué enseña |
|---|---|---|
normalizarMetrica | 12 | Unión discriminada, type guards, formato desconocido, campos opcionales con strict |
agregarPorMercado | 4 | Agrupar y sumar con Record, caso vacío |
procesarLotes | 6 | Lotes en orden, tamaño inválido, que nunca haya dos en vuelo |
normalizarSeguro | 3 | Unión de resultado en vez de excepción: el flujo no se cae por un registro malo |
consolidarCampanas | 5 | Recorrer páginas, deduplicar y separar descartes sin lanzar |
reintentar | 6 | Backoff con jitter, tope, y respetar retryAfterMs de un 429 |
La API falsa pagina y falla de forma determinista cada tres llamadas, así que reintentar
tiene algo real que reintentar.
Un candidato reportó que "each test run triggered API rule changes with no prior warning". Ese escenario está aquí, y es el que más se parece al viernes:
pnpm test:caos # una semilla pnpm test:caos:10 # diez semillas; falla si alguna no pasa
En modo caos, el cliente falso cambia de forma determinista según la semilla:
cada3, cada5 o pseudoaleatorio,retryAfterMs,La solución de referencia pasa en las diez semillas — y en las cuarenta. Si tu código solo pasa en la semilla por defecto, es que asume un orden, un tamaño de página o una forma fija. Eso es exactamente lo que el entrevistador te va a romper con una pregunta.
Promise<T[]>"Cuando ya lo hayas resuelto una vez, hazlo de nuevo así: pon un cronómetro de 60 minutos, abre voz.ened.online para grabarte y nárralo todo. Al terminar, escucha la grabación y responde: ¿se entiende lo que haces sin ver la pantalla? Si no, ese es el trabajo del jueves.