javascript - provocar - ¿Cómo pasar un mensaje de error personalizado a un jasmine matcher?
throws error javascript (4)
Puede definir un emparejador personalizado en el ámbito global, anulando el mensaje de error en jasmine de la siguiente manera:
beforeEach(function () {
jasmine.addMatchers({
toReport: function () {
return {
compare: function (actual, expected, msg) {
var result = {pass: actual == expected};
result.message = msg;
return result;
}
}
}
});
});
En todos los marcos de prueba que he usado, hay un parámetro opcional para especificar su propio mensaje de error personalizado.
Esto puede ser muy útil, y no puedo encontrar una manera de hacer esto de manera directa con jazmín.
He tenido otros 3 desarrolladores que me han preguntado acerca de esta funcionalidad exacta, y cuando se trata de jasmine no sé qué decirles.
¿Es posible especificar su propio mensaje de error personalizado en cada aserción?
Se agregó un parámetro opcional a todos los emparejadores (toBe, toContain y otros), por lo que puede usar:
expect(true).toBe(false, ''True should be false'').
Luego en la salida se verá así:
Message:
Expected true to be false, ''True should be false''.
Enlace a commit (esto no se describe en la documentación): https://github.com/ronanamsterdam/DefinitelyTyped/commit/ff104ed7cc13a3eb2e89f46242c4dbdbbe66665e
Este problema es el seguimiento del interés en la implementación de mensajes de error personalizados mediante un mecanismo .because()
.
Mientras tanto, avrelian ha creado una bonita biblioteca que implementa mensajes de error personalizados utilizando un mecanismo since()
: jasmine-custom-message
.
Si echas un vistazo al código fuente de jazmín, verás que no hay forma de configurar el mensaje desde fuera de un emparejador. Por ejemplo, el toBeNaN
toBeNaN.
/**
* Matcher that compares the actual to NaN.
*/
jasmine.Matchers.prototype.toBeNaN = function() {
this.message = function() {
return [ "Expected " + jasmine.pp(this.actual) + " to be NaN." ];
};
return (this.actual !== this.actual);
};
Como puede ver, los mensajes están codificados en el emparejador y se configurarán cuando llame al emparejador. La única forma en que puedo pensar en tener tus propios mensajes es escribir tu matcher como se describe here