2009-04-05 5 views
1

테스트AJAX 호출을 통해 추가 된 내용을 확인하기 위해 기능/컨트롤러 테스트를 어떻게 작성합니까?

def test_generateCashFlowStmt 
    get :getDateRangeForCashFlowStmt 
    xhr :post, 
     :generate_cash_flow_stmt, 
     {:fromDate => {:year=>"2009", :month => "3", :day=>"1"}, 
     :toDate => {:year=>"2009", :month => "3", :day=>"31"} } 

    table = [ ....  ] 
    assert_equal table, formatCashFlowStatementAsTable(assigns(:cashFlowStmt)) 
    assert_tag :tag => "div", :children => {:count => 1, :only => {:tag=>"table"} } 
    end 

컨트롤러 조치

def generate_cash_flow_stmt 
     puts params 
     fromDate = Date.civil params[:fromDate]["year"].to_i, params[:fromDate]["month"].to_i, params[:fromDate]["day"].to_i 
     toDate = Date.civil params[:toDate]["year"].to_i, params[:toDate]["month"].to_i, params[:toDate]["day"].to_i 

     @cashFlowStmt = CashFlowStatement.new(fromDate, toDate) 
     render :partial => "cash_flow_stmt", :layout => false 
    end 

보기

<% form_remote_tag(:loading => "Element.show('progress-indicator');", 
     :update => "div_results", 
     :complete => "Element.hide('progress-indicator');", 
     :url=>{:action=>'generate_cash_flow_stmt'}) do %> 
... 
<% end %> 
<div id="div_results"> 

테스트는 DIV 콘텐츠 홀더가 채워집니다 만약 내가 확인 마지막 검사에서 실패 generate_cash_flow_stmt ac의 호출의 결과로서의 테이블 운. 테이블이 브라우저에 표시되는 것을 볼 수 있지만 '소스보기'작업에 빈 div 태그가 표시됩니다. 뭐라 구요?

답변

1

빈 div를 표시하는 소스보기가 필요합니다. AJAX 호출은 dom을 업데이트하지만 원래 소스는 변경하지 않습니다. Firebug을 사용하여 DOM을 가장 잘 볼 수 있습니다.

테스트의 경우 : xhr :post 호출은 Ajax.Updater을 트리거하지 않으므로 실제로 페이지 div를 업데이트하지 않습니다. (Ajax.Updater는 xhr 호출을 생성합니다. 테스트에서 수동으로 호출을 시작하면 아무런 이벤트도 발생하지 않습니다.) 기능 테스트가 실제로 DOM을 추적하고 업데이트하거나 javascript를 실행한다고 생각지 않습니다.

테스트를 통과하려면 xhr 요청 (get :getDateRangeForCashFlowStmt은 수행하지 않음)을 생성하고 적절한 부분을 반환하는지 확인해야합니다. 레일 & 프로토 타입이 잘 테스트되었으므로 form_remote_tagAjax.Updater이 예상 한대로 수행하여 최종 페이지를 작성한다는 사실에 의존 할 수 있어야합니다.

0

기능 테스트에서 자바 스크립트를 테스트하지 않으려 고합니다. 기능 테스트는 자바 스크립트를 전혀 다루지 않습니다.

자바 스크립트를 테스트하기 위해 셀렌과 같은 것을 사용할 수 있습니다. 셀레늄은 기본적으로 브라우저에서 일을 시도하는 테스트입니다. 그리고 브라우저는 Javascript를 Rails의 기능 테스트보다 훨씬 잘 지원한다고 알려져 있습니다.)

관련 문제