2011-04-15 99 views
1

我想測試我的控制器,但我的控制器中的一些操作需要用戶登錄。我將如何測試它們?我是否直接與session變量混淆?另外,如果很多操作期望用戶登錄呢?我應該設置一個行動之前,並在那裏登錄用戶?如何測試需要用戶登錄的操作?

我的另一個想法是,我可以在集成測試中測試它們,然後在實際測試期望的操作之前在登錄表單上做一個帖子。例如:

def setup 
    # log the user in, this will happen before every test 
end 

# integration test 
test "I should see my posts" do 
    #setup should have happened before this, and I should be logged in 
    get posts_path 
    assert ... 
end 

這是測試這些操作的方法嗎?我錯過了什麼嗎?

回答

1

根據您使用的身份驗證框架,有幾種方法。例如,設計一些TestHelpers,這使得用戶無需通過功能測試中的實際網頁即可輕鬆登錄用戶。如果這不是一個選項,像soundsop說的,瀏覽器測試。 (看,從高到低:黃瓜,水豚,硒/ ...)

+0

我正在使用設計。你能幫我指點一下嗎? – Geo 2011-04-15 11:27:54

+0

谷歌搜索'testhelpers'和'設計'讓你在那裏:https://github.com/plataformatec/devise。 – wrtsprt 2011-04-15 12:50:31

1

不知道我是否誤解了,但像Selenium或iMacros這樣的網絡測試軟件是否有助於自動執行此測試?它可以爲你做登錄序列。

1

The Book包括在他們的倉庫應用程序的一些測試實例:

test "should login" do 
    dave = users(:one) 
    post :create, :name => dave.name, :password => 'secret' 
    assert_redirected_to admin_url 
    assert_equal dave.id, session[:user_id] 
end 

的「驗證用戶」一節中的全部細節。

0

您可以在設置中僞造用戶憑證,也可以使用模擬庫來檢查憑據的方法。我做了兩件事,並沒有一個堅定的偏好。