2012-09-04 82 views
1

我正在使用RSpec(通過gem rspec-rails)來測試和開發 我的應用程序。 我試着「測試」一個控制器,並運行後對一個奇怪的行爲,並獲得方法(所有其他類型的相同)。測試Rails控制器:獲取併發布奇怪行爲

在我的路線文件:

controller :sessions do 
    post '/login', action: :login_create 
    get '/login', action: :login 
    get '/logout', action: :logout 
end 

在開始的時候,我在想,後期將模擬在指定的URL的HTTP POST請求 ,所以我在我的規格寫道:

describe "POST 'login'" do 
    it "returns http success" do 
     post 'login' 
     response.should be_success 
     response.should render_template 'sessions/login_create' 
    end 
end 

但是這將調用登錄操作,而不是login_create,然後最後一個斷言失敗。 經過大量的谷歌搜索和實驗後,我改變了post 'login'post :login_create,這實際上工作! 奇怪的是,如果我改變postget,它將繼續工作! O_o 這不奇怪嗎?這些方法是如何工作和使用的?

在Rails的API,我沒有發現任何東西比其他類:ActionController::TestCase::Behavior

回答

1

什麼你寫的是控制器規範,而不是一個請求規範。在控制器規範中,根本不諮詢路由,因爲rspec直接調用控制器操作。

當您編寫post 'login'時,login指定操作名稱,而不是URL路徑。

測試login_create操作的正確方法是使用您發現的post :login_create

+0

沒關係,但發佈,獲取,放置和刪除有什麼區別?這只是一個清晰的問題嗎? – Iazel

+0

當動作被調用時,它設置正確的'request.method'。 (這麼晚纔回復很抱歉!!) –