我有以下代码:
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();
}
});
});
但是当我运行它时,它会给我一个错误,即对象不知道加载。你知道如何测试它吗?
由于
答案 0 :(得分:0)
您已使用变量window
中定义的副本替换了localContext
全局(我认为有点危险)。该变量没有load
方法,因此调用它会给出上述错误。
更好的解决方案是创建一个命名函数并测试其内部,并将该函数分配给window.onload
,而不是尝试测试分配给全局window
的匿名函数。
即
function checkBook(){
// Do stuff
}
window.onload = checkBook;
然后,您可以根据需要在测试中手动运行checkBook
。