
Testable JavaScript
Mark Ethan Trostler
- Editorial
- O'Reilly
- Año
- 2013
- Páginas
- ~274
- Nivel
- Intermedio
De qué trata
Libro de Mark Ethan Trostler, ingeniero de pruebas en Yahoo! Mail y después en Google, sobre cómo escribir y mantener JavaScript fácil de probar, tanto en el navegador como en Node.js y tanto en proyectos nuevos como al reescribir código heredado. Se publicó en 2013, en la era de ES5 y del ecosistema de pruebas de entonces (YUI Test, Jasmine, PhantomJS, Selenium). Está dirigido a desarrolladores JavaScript con experiencia que quieren mejorar la calidad y la mantenibilidad de su código.
Empieza situando el libro frente al desarrollo ágil, TDD y BDD, y después ataca la complejidad. Explica cómo medirla (tamaño del código, complejidad ciclomática, fan-in y fan-out, tipos y métricas de acoplamiento, JSLint), cómo reducirla con inyección de dependencias y cómo documentar con YUIDoc, JSDoc o Docco. Luego propone las arquitecturas basadas en eventos, con un «event hub» y un «event switch», como vía para lograr módulos desacoplados y fáciles de probar. En la parte práctica cubre los tests unitarios: aislamiento, pruebas positivas y negativas, dobles, mocks, stubs y espías, pruebas asíncronas con YUI Test, ejecución en el navegador con PhantomJS y Selenium (incluido iOS y Android) y en el servidor con Jasmine. También trata la cobertura de código (instrumentación, persistencia, agregación y objetivos); las pruebas de integración con Selenium WebDriver y Grid y con CasperJS, las de rendimiento con archivos HAR y las de carga; la depuración en Firefox, Chrome, Safari, Internet Explorer, Node.js, de forma remota y en móviles (Android, iOS, Adobe Edge Inspect), además de la depuración en producción con source maps; y la automatización con integración continua en Jenkins, hooks de commit y análisis de complejidad y código duplicado.
No se construye una aplicación: el libro avanza con ejemplos de código y montajes de herramientas, algo que algunos lectores describen como un catálogo de sistemas de pruebas. Su aporte más duradero son los capítulos conceptuales sobre complejidad, acoplamiento, inyección de dependencias y arquitecturas por eventos, que siguen siendo válidos. En cambio, las herramientas han envejecido mucho: YUI y PhantomJS se abandonaron y hoy se usan Jest, Vitest, Playwright, Istanbul/c8 o GitHub Actions. Los lectores señalan que el capítulo de cobertura cuesta seguirlo y que integración, rendimiento y carga están comprimidos en uno solo. Conviene leerlo por los principios y traducir mentalmente las herramientas a sus equivalentes actuales.
- Código testeable
- TDD y BDD
- Complejidad ciclomática
- Acoplamiento
- Inyección de dependencias
- Arquitectura basada en eventos
- Tests unitarios
- Mocks, stubs y espías
- Cobertura de código
- Selenium y CasperJS
- Depuración
- Integración continua con Jenkins
¿Cómo enseña?
Teoría + práctica
- ✗ Sin ejercicios
- ✗ Sin proyectos

