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.