¿Cómo probar window.load () en Jasmine con un window.location.href específico?

Tengo el siguiente código:

window.onload= function() { var requestData = { bookId:$('.bookId').text() }; if(window.location.href.indexOf("/viewbook")!=-1){ $.post("check-book", requestData, function (response) { if(response == "already saved") { $('.add-btn').attr('disabled', 'disabled'); } }); } }; 

Y estoy tratando de escribir una prueba apropiada en Jasmine. Entonces, ahora tengo el siguiente código:

 describe("should disable button", function () { it("should check if book exists in list while loading page", function () { var localContext = { "window":{ location:{ href:"/viewbook" } } } with(localContext){ spyOn($, 'post'); window.load(); expect(window.location.href).toBe("/viewbook"); //expect($.post).toHaveBeenCalled(); } }); }); 

Pero cuando lo ejecuto, me da un error que la carga no se conoce para un objeto. ¿Tienes alguna idea de cómo se puede probar esto?

Gracias

Ha reemplazado la window global (que creo que es un poco peligrosa) con la copia definida en la variable localContext . Esa variable no tiene un método de load , por lo que llamarlo le da el error anterior.

Una mejor solución sería crear una función con nombre y probar sus componentes internos, y asignar esa función a window.onload , en lugar de intentar probar una función anónima asignada a la window global.

es decir

 function checkBook(){ // Do stuff } window.onload = checkBook; 

A continuación, puede ejecutar el checkBook manualmente con la frecuencia que desee en sus pruebas.