2013-07-25 68 views
0

我剛剛開始學習使用rspec在Rails中進行測試。 我有一個用戶模式,我試圖寫一個測試,以登錄用戶的以下工作:sign_in user test rspec

describe "user login" do 
    let(:user) { FactoryGirl.create(:user) } 

    it "logs user in" do 
    visit root_path 
    click_link "Log In" 
    fill_in "Email", with: user.email 
    fill_in "Password", with: user.password 
    click_button "Submit" 

    expect(page).to have_content("You are now logged in.") 
    end 
end 

在我application_controller.rb我有以下方法:

def sign_in(user) 
    cookies.permanent[:auth_token] = user.auth_token 
    current_user = user 
end 

helper_method: sign_in 

我「M想知道爲什麼我sign_in方法不會在隨後的測試工作:

describe "user login2" do 
    let(:user) { FactoryGirl.create(:user) } 

    it "logs user in" do 
    sign_in(user) 

    expect(page).to have_content("You are now logged in.") 
    end 
end 

我得到以下錯誤:Failure/Error: sign_in(user) NoMethodError: undefined method 'sign_in'

回答

0

集成測試背後的想法是,您以與常規用戶相同的方式與界面進行交互。這就是你在使用水豚的第一次測試中所做的。

在第二次測試中,您可能必須在調用助手方法之前包含控制器代碼。但是測試仍然不起作用,因爲您嘗試測試頁面上是否顯示某些內容,儘管您尚未調用訪問權限。

如果你想寫集成測試,你應該去第一次測試。

如果您想編寫更多更低級別的測試,您可以直接從控制器登錄用戶,但必須以不同的方式驗證它。通過控制器/模型的某些屬性或直接從數據庫中獲取。

相關問題