2012-01-02 23 views
9

Tôi muốn đăng xuất một người dùng đã đăng nhập (với Devise/Warden) bằng cách sử dụng mspec mocks trong một bộ thử nghiệm Capybara trong ứng dụng Rails của tôi. Điều này sẽ tiết kiệm rất nhiều thời gian và điều đó có nghĩa là bộ thử nghiệm của tôi có thể/sẽ được chạy thường xuyên.Làm thế nào để Stub out Warden/Devise với Rspec trong thử nghiệm Capybara

Trước đây tôi đã có thể làm điều này bằng authlogic bởi loại bỏ dần từng mô hình phiên của tôi với một số mã như thế này:

def login(user) 
    user_session = mock_model(UserSession, {:user => user}) 
    UserSession.stub(:find).and_return(user_session) 
end 

Bây giờ mà tôi đang sử dụng lập mưu, tôi không còn được tiếp cận với một đối tượng UserSession. Và vì tôi đang sử dụng capybara để kiểm tra mã của mình, tôi không có quyền truy cập trực tiếp vào đối tượng yêu cầu để sử dụng trình trợ giúp thử nghiệm được xây dựng trong số sign_in của nhà phát triển.

Câu hỏi của tôi là: làm thế nào tôi có thể mô phỏng người dùng đã đăng nhập bằng capybara, devise và spec mocks mà không yêu cầu mọi kịch bản với người dùng đã đăng nhập trước tiên đi tới đường dẫn đăng ký, điền vào biểu mẫu, gửi, đợi để trả lời, và sau đó đi đến trang mong muốn?

+1

Không phải những gì bạn hỏi, nhưng chỉ trong trường hợp [login.rb] (https://github.com/gitlabhq/gitlabhq /blob/master/spec/support/login.rb) và [sample_use.rb] (https://github.com/gitlabhq/gitlabhq/blob/master/spec/requests/dashboard_issues_spec.rb) – clyfe

+0

Cảm ơn bạn đã phản hồi , Tôi đã có một cái gì đó như thế mà tôi đang cố gắng tránh. Mặc dù nhận xét của bạn chắc chắn hữu ích cho những khách truy cập trong tương lai có thể không. – Schneems

Trả lời

15

Warden đi kèm với người trợ giúp thử nghiệm tích hợp sẵn. Nó cho phép bạn đăng nhập mà không cần phải sử dụng giao diện người dùng trong các bài kiểm tra dưa chuột của bạn. Chỉ cần thêm các tệp bên dưới vào dự án của bạn.

# features/support/warden.rb

Warden.test_mode! 
World Warden::Test::Helpers 
After { Warden.test_reset! } 

# features/step_definitions/user_steps.rb

Given /^I am logged in as a user$/ do 
    @current_user = User.create!(:username => 'user', :password => 'password') 
    login_as(@current_user, :scope => :user) 
end 

Use Wardens.test_mode! with Capybara

+0

Tôi nghĩ đây là hướng đi đúng, nhưng không thể làm cho nó hoạt động được. Các phương thức trợ giúp được gọi đúng, nhưng current_user et. al vẫn không hiển thị chính xác trong ứng dụng của tôi. công việc này là dành cho bạn? – Schneems

+2

Tôi cần xác định phạm vi hiện tại của mình 'login_as @current_user,: scope =>: user' cảm ơn sự giúp đỡ – Schneems

+1

Cũng nhờ liên kết đến trang capybara, tôi thực sự đã kết thúc bằng văn bản rằng^_^https://github.com/plataformatec/devise/wiki/Hướng dẫn: -Test-with-Capybara/_history – Schneems

Các vấn đề liên quan