En esta entrada hablaremos de la composición de un test en TDD, y los métodos que suelen usarse en ellos.
Composición de un test en TDD. Métodos mas comunes
- describe: Se utiliza para agrupar un conjunto de pruebas, donde se ejecutarán pruebas unitarias agrupadas por clase y/o por método de la clase.
describe("Test for Person", ()=>{ describe("Test for person.getFullName", ()=>{ }); describe("Test for person.getAgeInYears", ()=>{ }); });
- beforeeach: Dentro de cada describe, podemos incluirlo. Todo lo que ejecutamos dentro de él, se ejecuta antes de cada it que contiene el describe. Un posible uso puede ser, para inicializar una variable que todos los test de ese describe usarán.
describe("Test for Person", ()=>{ beforeEach(()=>{ // Código que se ejecutará al principio de cada it de éste describe }); describe("Test for person.getFullName", ()=>{ beforeEach(()=>{ // Código que se ejecutará al principio de cada it de éste describe }); }); describe("Test for person.getAgeInYears", ()=>{ }); });
- aftereach: Igual que el anterior, dentro de cada describe se podría incluir. Todo lo que ejecutamos dentro de él, se ejecuta al acabar cada it que contiene el describe. Un posible uso puede ser en parar todo flujo en la aplicación una vez acabada las comprobaciones, para que al siguiente test, no le afecte.
describe("Test for Person", ()=>{ afterEach(()=>{ // Código que se ejecutará al final de cada it de éste describe }); describe("Test for person.getFullName", ()=>{ afterEach(()=>{ // Código que se ejecutará al final de cada it de éste describe }); }); describe("Test for person.getAgeInYears", ()=>{ }); });
- it: En cada it, definimos los casos de prueba a testear dentro de cada describe. Cada uno de ellos, debe evaluar un caso de prueba en particular.
describe("Test for Person", ()=>{ describe("Test for person.getFullName", ()=>{ it("should return an string with name + lastname", ()=>{ //CODE }); }); describe("Test for person.getAgeInYears", ()=>{ it("should return '34' years", ()=>{ //CODE }); it("should return '24' years", ()=>{ //CODE }); it("should return '20' years with negative number", ()=>{ //CODE }); }); });
- expect: En los expect se verifica el comportamiento de nuestro código esperando un resultado utilizando matcher para ello. (Matcher o verificadores de Jasmine).
expect(6+6).toEqual(12); expect(1 === 1).toBeThuthy(); expect(null).toBeNull(); expect("Nicolas").toEqual("Nicolas");
Test Completo
describe("Test for Person", ()=>{ describe("Test for person.getFullName", ()=>{ it("should return an string with name + lastname", ()=>{ let person = new Person("Nicolas", "Molina", 24); expect(person.getFullName()).toEqual("Nicolas Molina"); }); }); describe("Test for person.getAgeInYears", ()=>{ it("should return '34' years", ()=>{ let person = new Person("Nicolas", "Molina", 24); let age = person.getAgeInYears(10); expect(age).toEqual(34); }); it("should return '20' years", ()=>{ let person = new Person("Nicolas", "Molina", 20); let age = person.getAgeInYears(15); expect(age).toEqual(35); }); it("should return '20' years with negative number", ()=>{ let person = new Person("Nicolas", "Molina", 28); let age = person.getAgeInYears(-10); expect(age).toEqual(28); }); }); });