should length equal array javascript testing jasmine protractor

javascript - length - Imprimir mensaje en la falla de expect() assert



expect to be undefined chai (5)

¿Hay alguna forma de imprimir un mensaje de error personalizado cuando falla Jasmine expect() ?

Como ejemplo, para las pruebas de extremo a extremo, tengo una serie de páginas web y uso una prueba para ir a cada URL y afirmar que existe un elemento en cada página. Sé que puedo poner cada expect() en una prueba separada, pero preferiría iterar a través de la matriz y registrar la URL de la página en caso de falla.


Las otras respuestas explican cómo hackear ''esperar'', pero hay otro enfoque que puede resolver su problema, aunque requiere que cambie su forma de pensar un poco. En lugar de pensar en el "esperar" como su comportamiento bajo prueba, piense en todas las expectativas bajo un solo llamado "eso" como su comportamiento bajo prueba.

El caso en el que más me he encontrado con este problema es cuando tengo una función que realiza algún tipo de análisis intenso y quiero escribir 20 pruebas casi idénticas.

Organice sus entradas y salidas de esta manera:

var testDatas = [ { input: ''stringtoparse1'', output: ''String To Parse 1'' }, { input: ''stringtoparse2'', output: ''String To Parse 2'' }, { input: ''stringtoparse3'', output: ''String To Parse 3'' }, ];

Ahora itere sobre la lista de sus datos de prueba, y llame ''it'' desde el interior del bucle así:

testDatas.forEach(function(test) { it(''should parse for input '' + test.input, function() { expect(myParser(test.input).toEqual(test.output); }); });

Puede reducir la cantidad de códigos extraños que rodean sus pruebas y formatear un mensaje para cada expectativa o grupo de expectativas.


Puedes hacerlo con el método fail() .

it(''should fail with a message'', function() { if (!foo) fail(`your message here`); });


Sí, podemos imprimir un mensaje de error personalizado cuando un expect () falló en Jasmine.

Code Snippet: it(''print a custom error message when an expect failed'', function() { var elemenToBeDisplayed=element(by.css("userName")); /*custom error message will be displayed if expected condition failed*/ expect(elemenToBeDisplayed.isPresent).toBe(true,''Write your custom error message here''); });


Tenía un requisito para registrar mensajes personalizados para Jasmine y utilicé el siguiente método.

beforeEach(function(){ this.addMatchers({ customError: function(mesg){ this.message= function () { return mesg; }; return this.actual == true; } }); }); if(<fail condidtion>){ expect(false).customError(<Fail message>) }

Tenga en cuenta que lo que he mencionado anteriormente es por formato jazmín 1. Habrá un ligero cambio si usa jazmín 2. Espero que esto sea útil para usted


ACTUALIZAR

Veo que la gente todavía está encontrando esto. La información posterior del equipo de Jasmine es que hay una función no documentada en espera: puede incluir un mensaje de error personalizado y simplemente funciona:

expect( fields[i].element.exists() ).toEqual(true, field[i].name + '' is expected to exist'');

Que es exactamente lo que estaba buscando originalmente.

La respuesta original sigue :

He estado buscando exactamente esto hoy, y pongo un comentario aquí: https://github.com/adobe/brackets/issues/2752

La sintaxis que se ha discutido es una extensión de Jasmine para permitir un porque se agregará, para que pueda escribir:

expect( fields[i].element.exists() ).toEqual(true).because( field[i].name + ''is expected to exist'');

Eso todavía se está discutiendo después de algunos años, y puede no llegar a buen término. Otra forma que he encontrado para hacer esto es crear un marcador personalizado. En general, creo que desalentaría un marcador personalizado sin estar seguro de que estás cubriendo todas las bases con él, pero en este caso realmente estamos verificando un valor verdadero / falso, por lo que el marcador no es demasiado aterrador.

Podemos crear el marcador personalizado con un beforeEach:

beforeEach(function() { var matchers = { toEqualBecause: function( value, message ) { this.message = function() { return "Expected ''" + this.actual + "'' to equal ''" + value + "'' because " + message; }; return this.actual == value; } }; this.addMatchers(matchers); });

A continuación, podemos utilizar este matcher para poner un mensaje con nuestras fallas como tal:

expect( field[i].element.exists() ).toEqualBecause( true, field[i].name );

Lo cual dará un resultado de falla incluyendo el nombre del campo como tal:

Expected ''false'' to equal ''true'' because account_name