我正在嘗試爲我的應用程序實施一些集成測試,以測試我已有的投票系統,但遇到了一些問題。首先,這裏是測試代碼,我試圖去通過:Rspec測試失敗失蹤模板格式問題
describe "vote_up_user" do
it "should update the user rating" do
click_link "user_up_arrow"
response.should have_selector("#user_rating", :content => "1")
end
end
這裏是一個被點擊的鏈接:
<%= link_to image_tag("uparrowbig.png"), vote_up_user_path(@user), :method => :post,
:id => "user_up_arrow", :class => "arrow", :remote => true %>
相應的動作:
respond_to :html, :js
def vote_up_user
@voted_on_user = User.find(params[:id])
current_user.vote_exclusively_for(@voted_on_user)
respond_with(@voted_on_user, :location => user_path(@voted_on_user))
end
和如果有人感興趣相應的投票/ vote_up_user.js.erb:
$("user_rating").update('<%= @voted_on_user.plusminus.to_s %>')
$("user_up_arrow").update('<%= image_tag("uparrowbigselect.png") %>')
$("user_down_arrow").update('<%= image_tag("downarrowbig.png") %>')
我的問題是,我一直在與以下錯誤click_link線失敗:
Missing template votes/vote_up_user with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]}
我可以理解爲什麼這是失敗的,因爲我沒有一個模板,在指定的路徑html.erb。我實際上有一個js.erb文件,因爲這是一個AJAX調用,但這不包含在:formats數組中,因此找不到。那麼我的問題是,當集成測試點擊鏈接時,確保:js格式搜索的最佳方式是什麼?這是我可以簡單地在測試中調整,還是需要將它添加到鏈接助手?
感謝您的鏈接,我一定會來檢查出。我想知道自己是否對測試產生了影響,當然也有可能。然而,這個測試的目標不一定是測試javascript,如果我現在理解正確,現在這個測試會模仿沒有啓用javascript的瀏覽器(不要引用我)。在任何情況下不應該控制器的行動仍然呈現的HTML而不是拋出一個錯誤?我有另一種情況,我發佈表單而不是使用鏈接,並且在這種情況下似乎可以正常工作 - 這是否也能改善? – 2011-03-15 15:27:33
是的,你是對的。這是模仿瀏覽器沒有啓用JavaScript。由於沒有啓用JavaScript,它將查找.html.erb視圖。既然你沒有,就會拋出錯誤。 Rails知道呈現.js.erb文件的唯一方法是如果將.js放在URL的末尾,或者請求頭包含如下內容:'Accept:text/javascript,application/javascript'默認情況下發生當你真正運行Javascript並執行AJAX時。 – dontangg 2011-03-15 15:49:17
如果您不想測試JavaScript,那麼您可以測試鏈接是否具有正確的URL和'data-remote'屬性,而不是單擊鏈接。然後,只需在URL末尾添加.js(例如'get'/ user/23/vote_user_up.js')。 – dontangg 2011-03-15 16:07:52