matcha leche latte contraindicaciones con javascript chai

javascript - leche - Prueba un rechazo con Chai como prometiĆ³



te chai matcha (4)

Al tener la versión 5.1.0 de ChaiAsPromised, la solución de Keithamus no funcionó para mí: rechazada Con no me dio el error del objeto a afirmar, pero "rechazado" sí:

return expect(foo()) .to.be.rejected .and.be.an.instanceOf(Error) .and.have.property(''code'', ''EFOO'');

Para afirmar múltiples propiedades.

return expect(foo()) .to.be.rejected .then(function(error) { expect(error).to.have.property(''name'', ''my error message''); expect(error).to.have.property(''code'', ''EFOO''); });

Quiero probar una función devolviendo una promesa.

En esta prueba en particular, se espera que la promesa sea rechazada con un objeto Error que contiene el campo de message clásico (en esta prueba, se espera que sea igual a "my error message" ) y un campo personalizado que agregué con el nombre de code , que es una cadena (como "EACCESS", "ERIGHT", etc., en esta prueba se espera que sea igual a "EFOO" )

Quiero usar chai-como-prometido para eso.

return expect(foo()).to.eventually.be.rejectedWith("my error message");

Esta afirmación está funcionando pero ahora me gustaría probar el campo de code también.
¿Como hacer eso?


La solución de @Markko Paas no me funcionó hasta que agregué ''eventualmente'', o bien el valor rechazado siempre es {} objeto vacío.

return expect(foo()) .to.eventually.be.rejected .and.be.an.instanceOf(Error) .and.have.property(''code'', ''EFOO'');


Puede realizar pruebas complejas en errores utilizando rejected.then .

it(''throws a complex error'', function () { return expect(foo()).to.eventually.be.rejected.then((error) => { expect(error.code).to.equal(''expected code''); // other tests // alternatively, expect (error).to.eql({ foo: ''foo'', bar: ''bar }); }); });


Si está usando Chai-As-Promised (como usted dice que es), entonces se permite el encadenamiento de rejectedWith - y establece que el objeto de aserción de cadena sea el objeto de error - lo que significa que después de rejectedWith() ahora va a Afirmar en el error. Esto te permite hacer cosas geniales como:

return expect(foo()).to.eventually .be.rejectedWith("my error message") .and.be.an.instanceOf(Error) .and.have.property(''code'', ''EFOO'');

Algunos de los métodos chai también se encadenan, así que puedes usar eso para hacer algunas aseveraciones bastante anidadas sobre el error:

return expect(foo()).to.eventually .be.rejectedWith("my error message") .and.have.property(''stack'') .that.includes(''myfile.js:30'')