2012-11-27 5 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에 할당 된 익명의 함수를 테스트하는 대신이 함수를 window.onload에 할당하는 것이 더 좋은 해결책입니다.

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

당신은 수동으로 자주 당신이 당신의 시험에서 원하는 checkBook를 실행할 수 있습니다.

관련 문제