tutorial test run princess karma javascript jasmine

javascript - test - Fallar a la fuerza una prueba de jazmín



karma js (2)

Si tengo un código en una prueba que nunca debería alcanzarse (por ejemplo, la cláusula de fail de una secuencia de promesa), ¿cómo puedo forzar el fallo de la prueba?

Yo uso algo como expect(true).toBe(false); Pero esto no es bonito.

La alternativa es esperar a que se agote el tiempo de prueba, lo cual quiero evitar (porque es lento).


Gracias TrueWill por llamar mi atención sobre esta solución. Si está probando funciones que devuelven promesas, entonces debe usar done en it() . Y en lugar de llamar a fail() , debe llamar a done.fail() . Ver la documentación de Jasmine .

Aquí hay un ejemplo

describe(''initialize'', () => { // Initialize my component using a MOCK axios let axios = jasmine.createSpyObj<any>(''axios'', [''get'', ''post'', ''put'', ''delete'']); let mycomponent = new MyComponent(axios); it(''should load the data'', done => { axios.get.and.returnValues(Promise.resolve({ data: dummyList })); mycomponent.initialize().then(() => { expect(mycomponent.dataList.length).toEqual(4); done(); }, done.fail); // <=== NOTICE }); });


Jasmine proporciona un método global fail() , que se puede usar dentro de los bloques de especificaciones it() y también permite usar mensajes de error personalizados:

it(''should finish successfully'', function (done) { MyService.getNumber() .success(function (number) { expect(number).toBe(2); done(); }) .fail(function (err) { fail(''Unwanted code branch''); }); });

Esta es una funcionalidad integrada de Jasmine y funciona bien en todas partes en comparación con el método de ''error'' que mencioné a continuación.

Antes de la actualización:

Puede lanzar un error desde esa bifurcación de código, fallará una especificación de inmediato y podrá proporcionar un mensaje de error personalizado:

it(''should finish successfully'', function (done) { MyService.getNumber() .success(function (number) { expect(number).toBe(2); done(); }) .fail(function (err) { throw new Error(''Unwanted code branch''); }); });

Pero debe tener cuidado, si desea lanzar un error desde el controlador de éxito Promise then() , porque el error se tragará allí y nunca aparecerá. También debe tener en cuenta los posibles controladores de errores en su aplicación, que pueden detectar este error dentro de su aplicación, por lo que no podrá fallar una prueba.