Usamosconsole.assert en nuestra base de código como parte de la programación defensiva para verificar algunas partes complicadas del código y anotar suposiciones sobre lo que se está haciendo en el código/los valores que calcula/asume, etc.
Ejemplo:
function calculateSomething(a, b, c) { // assume, we know that the calculation result below should never be negative, because other logic assures that (b - c) < a (This is just an example.) // or that check is implemented here, but just to make sure you put that negative check before returning the value const result = a - (b - c); console.assert(result > 0, 'result must not be negative, but was', result); return result; } console.log('result 1:', calculateSomething(1, 2, 3)); // fails console.log('result 2:', calculateSomething(1, 3, 2)); // worksAhora, nos dimos cuenta de que esto solo falla/imprime un mensaje de error en la consola en el código de producción/ejecuciones habituales del código, pero no explícitamente cuando las pruebas ejecutan el código.
¿Cómo puedes hacer que console.assert también falle en las pruebas?
De acuerdo, supongo que puede bloquearlo y, como puede ser útil, mantener el callThrough original además de callFake . Simplemente coloque esto en su beforeEach y sus pruebas respetarán console.assert y lo tratarán como un error:
Versión mecanografiada:
const realConsoleAssert = console.assert; assertSpy = spyOn(console, 'assert').and.callFake((assertion: any, message?: string, ...optionalParams: any[]) => { realConsoleAssert(assertion, message, ...optionalParams); expect(assertion).toBeTruthy(`${message} ${optionalParams.concat(' ')}`); });Versión de JavaScript:
const realConsoleAssert = console.assert; assertSpy = spyOn(console, 'assert').and.callFake((assertion, message, ...optionalParams) => { realConsoleAssert(assertion, message, ...optionalParams); expect(assertion).toBeTruthy(`${message} ${optionalParams.concat(' ')}`); }); Especialmente, los parámetros optionalParams aún no son ideales y no los tratan tan elegantemente como puede hacerlo console.assert , por ejemplo, undefined se convierte en una cadena vacía mientras que la versión del navegador lo imprimirá correctamente, pero eso es solo un detalle menor en mi humilde opinión.
Sin embargo, esto podría simplificarse con una estrategia de espionaje personalizada .