Cómo probar el código dentro de $ (ventana) .on (“cargar”, función () {}); en jasmine

Tengo un javascript a continuación, que agrega un DIV en la carga de la página y lo oculta después de 3 segundos.

var testObj = { initialize: function() { var that = this; $(window).on("load", function() { (function ($) { //Append Div $('body').append("
TEST
"); })(jQuery); that.hideAppendedDiv(); }); }, hideAppendedDiv: function() { //Hide appended Div after 3s setTimeout(function(){ $("div").hide(); }, 3000); } }; //call Initialize method testObj.initialize();

Cómo escribir casos de prueba Jasmine para los métodos en el código.

Supongo que realmente no quieres probar una función de Javascript como $(window).on('load')... , pero que tu propia función hideAppendedDiv() se llama desde $ (window) .on (‘carga’). Además, desea asegurarse de que la función hideAppendedDiv() funciona.

OMI, necesita dos expectativas.

En algún lugar de su configuración antes de cada función:

 beforeEach(function () { spyOn(testObj , 'hideAppendedDiv').and.callThrough(); }); 

Esperanzas de heredar

 it('expects hideAppendedDiv() to have been called', function () { // make the call to the initialize function testObj.initialize (); // Check internal function expect(testObj.hideAppendedDiv).toHaveBeenCalled(); }); it('expects hideAppendedDiv() to hide div', function () { // make the call to the hideAppendedDiv function testObj.hideAppendedDiv(); // Check behavior expect(... check the div ...) }); 

Editar


Para ser claros, Jasmine ejecuta todas las expectativas en orden. Ahora, si tiene dos funciones fn_1() y fn_2() y quiere probar que fueron llamadas para poder configurar otra función spi que devuelve un valor específico, o un conjunto de valores secuencial e incremental cada vez que se llama.

 beforeEach(function () { spyOn(testObj , 'fn_1').and.returnValues(1, 2, 3); spyOn(testObj , 'fn_2').and.returnValues(4, 5, 6); }); 

La primera vez que se llama a fn_1 devolverá 1, respectivamente, fn_2 devolverá 4.

Esa es solo una de las formas, pero tienes que ser creativo al probar.

Ahora, si desea probar que se llamó a una función después de x cantidad de tiempo, aquí hay una publicación que ya lo explica.

No necesita probar el evento de carga de la ventana, si mueve el código adjunto de la llamada a la función anónima y lo pasa al controlador del evento, puede probar la funcionalidad exactamente de la misma manera que lo haría con cualquier otra cosa y su código estar mejor estructurado