Imagen siguiente caso de prueba:
it('valid emails checks', () => { ['abc@y.com', 'a@b.nz'/*, ...*/].map(mail => { expect(isValid(mail)).toBe(true); }); }); Me gustaría agregar un mensaje generado automáticamente para cada correo electrónico, como el correo Email 'f@f.com' should be valid para que sea fácil encontrar casos de prueba fallidos.
Algo como:
// .map(email => expect(isValid(email), `Email ${email} should be valid`).toBe(true);¿Es posible en Jest ?
En Chai fue posible hacerlo con un segundo parámetro como expect(value, 'custom fail message').to.be... y en Jasmine parece que se hizo con la cláusula .because . Pero no puedo encontrar la solución en Jest.
Prueba esta biblioteca que amplía broma: https://github.com/mattphillips/jest-expect-message
test('returns 2 when adding 1 and 1', () => { expect(1 + 1, 'Woah this should be 2!').toBe(3); });No creo que sea posible dar un mensaje así. Pero podrías definir tu propio comparador .
Por ejemplo, podría crear un toBeValid(validator) :
expect.extend({ toBeValid(received, validator) { if (validator(received)) { return { message: () => `Email ${received} should NOT be valid`, pass: true }; } else { return { message: () => `Email ${received} should be valid`, pass: false }; } } });Y luego lo usas así:
expect(mail).toBeValid(isValid); Nota: toBeValid devuelve un mensaje para ambos casos (éxito y fracaso), porque te permite usar .not . La prueba fallará con el mensaje correspondiente dependiendo de si quieres que pase la validación.
expect(mail).toBeValid(isValid); // pass === true: Test passes // pass === false: Failure: Email ... should be valid expect(mail).not.toBeValid(isValid); // pass === true: Failure: Email ... should NOT be valid // pass === false: Test passesAunque no es una solución general, para el caso común de querer un mensaje de excepción personalizado para distinguir los elementos en un bucle, puede usar test.each de Jest.
Por ejemplo, su código de muestra:
it('valid emails checks', () => { ['abc@y.com', 'a@b.nz'/*, ...*/].map(mail => { expect(isValid(mail)).toBe(true); }); });Podría convertirse en cambio
test.each( ['abc@y.com', 'a@b.nz'/*, ...*/], 'checks that email %s is valid', mail => { expect(isValid(mail)).toBe(true); } );