2012-11-27 51 views
1

我有以下代码:如何使用特定的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'); 
     } 
    }); 
} 
}; 

,我试图写在茉莉花一个合适的测试。所以,我有以下代码:

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

}); 

但是,当我运行它,它给了我一个错误,加载不知道一个对象。你有什么想法如何进行测试?

感谢

回答

0

您已经取代了window全球(我倒觉得是一种危险的),在变量定义localContext副本。该变量没有load方法,所以调用它会给你上面的错误。

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

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

然后,您可以手动运行checkBook往往你在你的测试需要。

相关问题