4

我正在導軌3.2上打開資產管道。我正在測試我尚未構建的操作(TDD;試圖讓測試首先失敗)。當我最初運行測試時,我得到了預期的失敗。爲沒有路徑的操作寫入失敗的測試,即使資產管道已打開

class AccountsControllerTest < ActionController::TestCase 

    def test_my_path 
    get :my_path 
    puts @response.body 
    assert_template :my_path 
    end 

end 

#=> test_my_path(AccountsControllerTest): AbstractController::ActionNotFound: The action 'my_path' could not be found for AccountsController 

當我添加相應的視圖(app /視圖/ my_path.html.erb),我仍然期望因爲我還沒有指定用於此操作的路線的測試失敗。它通過,我認爲這是因爲該資源管道正在渲染頁面。在我看來,我打電話<%= request.fullpath %>,並從puts @response.body呼叫吐出/assets?action=my_path

當我嘗試訪問瀏覽器中的accounts/my_path時,我看到「沒有路由匹配[GET]」/ accounts/my_path「」,所以我想確保我的測試失敗了。爲什麼會發生這種情況,我應該如何解決這個問題?我應該改爲使用assert_recognizes分別測試路由嗎?爲了縮小問題的根源,我的路線文件目前是空的。

回答

1

首先,即使沒有定義相應的動作(http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-by-default-convention-over-configuration-in-action),Rails控制器也會渲染現有的模板。這就是爲什麼你添加模板後你的測試通過了。

功能測試直接調用控制器操作,不通過路由器。所以即使路由沒有定義,測試也會通過,並且在瀏覽器中不起作用。使用單獨的測試用例進行路由測試(或集成測試中的測試路由)。

相關問題