Solución:
Para probar el código asíncrono con jasmine, debe usar su sintaxis asíncrona, por ejemplo:
describe('test promise with jasmine', function(done) {
var promise = getRejectedPromise();
promise.then(function() {
// Promise is resolved
done(new Error('Promise should not be resolved'));
}, function(reason) {
// Promise is rejected
// You could check rejection reason if you want to
done(); // Success
});
});
ahora puedes usar expectAsync()
Esperando éxito:
it('expect result', async () => {
...
await expectAsync(someAsyncFunction(goodInput)).toBeResolved(expectedResponse)
})
Esperando fracaso:
it('expect result', async () => {
...
await expectAsync(someAsyncFunction(badInput)).toBeRejectedWith(expectedResponse)
})
jasmine 2.7 en adelante admite la devolución de promesas, y se probaría su estado cumplido.
Para probar el rechazo:
it('test promise with jasmine', async () => {
try {
await getRejectedPromise();
} catch (err) {
return;
}
throw new Error('Promise should not be resolved');
});
o todavía:
it('test promise with jasmine', async () => {
await getRejectedPromise()
.then(
() => Promise.reject(new Error('Promise should not be resolved')),
() => {});
});
Para verificar el mensaje real, además de lo habitual instanceof/toBe()
, colocar dentro del catch
:
expect(() => { throw err }).toThrow(new MyCustomError('Custom error message'));
El beneficio de este enfoque es tener un mensaje de error más agradable en la salida de la prueba.
Se esperaba que la función arrojara MyCustomError: mensaje de error personalizado, pero arrojó otro mensaje de error.
Algo mejor que la salida habitual.
Para probarlo resuelto (no puede ser más simple):
it('test promise with jasmine', async () => {
await getRejectedPromise();
});
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)