2016-12-05 18 views
1

我在rails上的ruby單元測試有問題(rails v。5.001)。我使用devise和cancancan進行授權。用戶需要在測試單元中登錄,但是如何在不重定向到http://www.example.com/users/sign_in的情況下執行此操作?下面是代碼:控制器測試:<302: Found>重定向到<http://www.example.com/users/sign_in>

appointments_controller_test.rb

require 'test_helper' 

class AppointmentsControllerTest < ActionDispatch::IntegrationTest 
    include Devise::Test::IntegrationHelpers 

    def sign_in(user) 
    post user_session_path \ 
     "[email protected]" => user.email, 
     "hhdk#s0" => user.password 
    end 

    setup do 
    @heikoAppointment = appointments(:appointment_heiko) 
    @heiko = users(:user_heiko) 
    sign_in(@heiko) 
    end 

    test "should get index" do 
    get appointments_url 
    assert_response :success 
    end 

    test "should get new" do 
    sign_in(@heiko) 
    get new_appointment_url 
    assert_response :success 
    end 

這裏是錯誤,我得到當我運行測試:

Error: 
AppointmentsControllerTest#test_should_get_new [C:/Users/Clemens/meindorfladen/Server/test/controllers/appointments_controller_test.rb:33]: 
Expected response to be a <2XX: success>, but was a <302: Found> redirect to <http://www.example.com/users/sign_in> 

回答

2

問題是你的用戶是沒有得到證實。

您需要

confirmed_at = Time.now 

傳遞到您所創建的用戶。那會阻止你重定向。

+0

如果我添加include_Warden ::測試::助手和使用should_get_new login_as(@heiko),那麼出現這樣的錯誤:AppointmentsControllerTest#test_should_get_new: UncaughtThrowError:未捕獲拋出:監獄長 測試/控制器/ appointments_controller_test.rb:26:在'在'中嵌入' – Peter

+0

@Peter在用戶模型中是否有'confirmable'? – DMH

+0

yes在models/user.rb中我確認:devise:database_authenticatable,:可註冊, :可恢復的,:可記住的,:可跟蹤的,:可驗證的,:可確認的 – Peter