Foxandxss
¿Hará que escriba mejor código?
NO
¿No es una pérdida de tiempo?
function generar(p1, p2, options) {
// no hago nada con options
}¿Solución? TDD
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);export class SomeService {
people: Person[] = [];
someRegex: string = /^....$/;
someId = 1;
...
...
}export class SomeComponent {
users: User[];
constructor(private http: Http) {
this.http.get('api/users').subscribe(....);
}
}+
No hay código extra
La API es buena
¿Funcionará? Seguro.
¿Refactor? Adelante, los tests te ayudarán.
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.
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
Introducción original:
Documentación Jasmine:
Angular v4 testing: