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

时间:2012-11-27 16:39:50

标签: jquery jasmine

我有以下代码:

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

});

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

由于

1 个答案:

答案 0 :(得分:0)

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

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

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

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