如何使用特定的window.location.href在Jasmine中测试window.load()?

我有以下代码:

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'); } }); } }; 

我正在尝试在Jasmine中编写一个合适的测试。 所以,我有以下代码:

 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(); } }); }); 

但是当我运行它时,它会给我一个错误,即对象不知道加载。 你知道如何测试它吗?

谢谢

您已使用变量localContext定义的副本替换了全局window (我认为这有点危险)。 该变量没有load方法,因此调用它会给出上述错误。

更好的解决方案是创建一个命名函数并测试其内部,并将该函数分配给window.onload ,而不是尝试测试分配给全局window的匿名函数。

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

然后,您可以根据需要在测试中手动运行checkBook