测试
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标签。是什么给了什么?
答案 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_tag
和Ajax.Updater
将按照预期进行操作并构建最终页面。
答案 1 :(得分:0)
您不想在功能测试中测试javascript。功能测试根本不包括javascript。
你可以使用像Selenium这样的东西来测试你的javascript。 Selenium基本上是试图在浏览器中做事的测试。众所周知,浏览器比Rails的功能测试更好地支持javascript; )