
Introducción al Unit Testing
Jesús Rodríguez
Foxandxss

¿Qué es el testing y en concreto el Unit Testing?
¿Hará que escriba mejor código?
NO
¿No es una pérdida de tiempo?

Código extra
function generar(p1, p2, options) {
// no hago nada con options
}
¿Solución? TDD
APIs mal hechas
Angular 1.x:
// Ejecutar detección de cambios
$apply();Angular 2+:
// Ejecutar detección de cambios
fixture.detectChanges();MAL
proceso.generar(datos: any);BIEN
registro,validar(formulario: Usuario);Refactorización
export class SomeService {
people: Person[] = [];
someRegex: string = /^....$/;
someId = 1;
...
...
}export class SomeComponent {
users: User[];
constructor(private http: Http) {
this.http.get('api/users').subscribe(....);
}
}¿Funcionará?


+
¿Funcionará... con todos los navegadores?

DEMO
¿Conclusiones?
No hay código extra
La API es buena
¿Funcionará? Seguro.
¿Refactor? Adelante, los tests te ayudarán.
Angular v4 Testing
Un pequeño repaso...
En Angular tenemos los NgModule:
@NgModule({
imports: [ BrowserModule, HttpModule ],
declarations: [ AppComponent, TeamsComponent, CapitalizePipe ],
providers: [ TeamService ],
bootstrap: [ AppComponent ]
})
export AppModule {}Que es como una caja donde registramos las distintas piezas de nuestra aplicación...
UNIT testing y mocks
La regla de oro de los unit test, es que una unidad (unit) tiene que ser testeada sin necesitar ninguna de sus dependencias.
class TeamServiceSpy {
getTeams = jasmine.createSpy('getTeams').and.callFake(() => {
return Observable.of([{ id: 0, name: 'Madrid'}, { id: 1, name: 'Malaga' }]);
});
}Un ejemplo de mock de un servicio sería:
Eso quiere decir, que si una unidad tiene dependencias, tenemos que reemplazarlas por mocks.
TestBed
En testing, tenemos nuestros propios NgModule:
TestBed.configureTestingModule({
imports: [ ... ],
declarations: [ ... ],
providers: [ ... ],
...
});Nuestra propia caja vacía que podemos configurar como necesitemos.
TestBed es la utilidad principal de Angular para escribir nuestros tests.
DEMO
¿Conclusiones?
Datepicker testeado sin esfuerzo
Ya no hay que mirar más 20 mil fechas
Es fácil de hacer TDD a una app a ciegas
No hemos tenido ni que lanzar el servidor
Referencias
Introducción original:
Documentación Jasmine:
Angular v4 testing:
Mil gracias
Introducción al testing
By Jesus Rodriguez
Introducción al testing
Introducción al Unit Testing y su aplicación en Angular v4
- 497