2012-11-27 50 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往往你在你的測試需要。

相關問題