测试
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 access而填充了表。虽然我在浏览器中看到了正在显示的表,但“View Source”操作显示了一个空白的div标签。怎么回事?
发布于 2009-04-06 01:10:42
显示空白div的View Source是预期的。AJAX调用会更新dom,但不会更改原始源。您可以使用Firebug最好地查看DOM。
至于测试:xhr :post调用不会触发Ajax.Updater,因此实际上不会更新页面div。( Ajax.Updater是生成 xhr调用的内容。通过在测试中手动启动调用,不会发生此类事件。)我也不相信功能测试真的会跟踪和更新DOM或执行javascript。
要通过测试,您应该只生成xhr请求(不要执行get :getDateRangeForCashFlowStmt),然后确认它返回了适当的部分。由于Rails & Prototype已经过了良好的测试,您应该能够相信form_remote_tag和Ajax.Updater将完成它们应该做的事情,并构建您的最终页面。
发布于 2009-04-06 07:50:37
你不想在你的功能测试中测试javascript。功能测试根本不包括javascript。
您可以使用Selenium之类的东西来测试您的javascript。Selenium基本上是尝试在浏览器中执行操作的测试。众所周知,浏览器对javascript的支持比Rails的功能测试要好得多。)
https://stackoverflow.com/questions/719321
复制相似问题