1

我有以下代码:

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

});

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

谢谢

4

1 回答 1

0

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

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

IE

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

checkBook然后,您可以在测试中尽可能频繁地手动运行。

于 2013-04-09T02:42:23.657 回答