如何编写功能/控制器测试以检查通过AJAX调用添加的内容?

时间:2009-04-05 17:19:52

标签: ruby-on-rails ajax unit-testing tdd

测试

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">

测试在最后一次检查时失败,我在那里检查是否由于调用generate_cash_flow_stmt访问而填充了div内容持有者。虽然我看到表格在浏览器中显示,但“查看源”操作显示空白的div标签。是什么给了什么?

2 个答案:

答案 0 :(得分:1)

预计显示空白div的View Source。 AJAX调用更新dom,但不更改原始源。您可以使用Firebug最佳地查看DOM。

至于测试:xhr :post调用不会触发Ajax.Updater,因此实际上不会更新页面div。 (Ajax.Updater是生成 xhr调用。通过在测试中手动启动调用,不会发生此类事件。)我也不相信功能测试实际上跟踪和更新DOM或执行javascript。

要获得通过测试,您应该只生成xhr请求(不要执行get :getDateRangeForCashFlowStmt),然后确认它返回适当的部分。自从Rails&amp;原型经过充分测试,您应该能够依赖form_remote_tagAjax.Updater将按照预期进行操作并构建最终页面。

答案 1 :(得分:0)

您不想在功能测试中测试javascript。功能测试根本不包括javascript。

你可以使用像Selenium这样的东西来测试你的javascript。 Selenium基本上是试图在浏览器中做事的测试。众所周知,浏览器比Rails的功能测试更好地支持javascript; )

相关问题