2012-02-04 28 views
5

Tôi đang cố bắt đầu một phiên người dùng mới bằng cách tạo trình trợ giúp POST phiên mới của người dùng. Dưới đây là những gì tôi cóThông số yêu cầu RSpec/Capybara Yêu cầu - Không thể đưa ra để POST phiên người dùng mới

def login(user) 
    post user_session_path, :login => user.username, :password => user.password 
end 

Và đối với người sử dụng

user = Factory.create(:user) 

Tôi có một thử nghiệm trong RSpec rằng đạo người dùng đến một trang yêu cầu xác thực. Sử dụng trình trợ giúp, tôi hy vọng một phiên người dùng mới sẽ được tạo. Tuy nhiên, chạy spec, nó cho tôi biết trang hiện tại là màn hình đăng nhập. Điều này cho biết phiên người dùng mới không được tạo và người dùng đang được chuyển hướng đến màn hình đăng nhập khi truy cập tài nguyên bị hạn chế mà không có phiên người dùng. Nhìn vào các bản ghi thử nghiệm, đây là trường hợp.

Cũng xem nhật ký, có nghĩa là hành động POST không được phép.

Started POST "/login" for 127.0.0.1 at 2012-02-04 13:34:59 -0800 
Processing by SessionsController#create as HTML 
Parameters: {"login"=>"foo12", "password"=>"[FILTERED]"} 
Completed 401 Unauthorized in 1ms 
Processing by SessionsController#new as HTML 
Parameters: {"login"=>"foo12", "password"=>"[FILTERED]"} 
Rendered devise/shared/_links.erb (1.4ms) 
Completed 200 OK in 15ms (Views: 12.7ms | ActiveRecord: 0.0ms) 

Tôi đã thử sử dụng trang đăng nhập thông qua trình duyệt theo cách thủ công và có thể tạo phiên tốt. Tôi cũng đã viết một bài kiểm tra với Capybara truy cập trang đăng nhập, điền vào thông tin đăng nhập của người dùng và gửi. Điều này tạo ra một phiên người dùng mới mà không có vấn đề gì.

+0

tôi chạy vào một thời gian ngắn này, khi Tôi đã cố gắng kết hợp 2 tờ khai này thành 1, do nhầm lẫn. Họ nên tách biệt nhau. 'config.before (: mỗi) làm DatabaseCleaner.strategy =: giao dịch cuối config.before (: mỗi) làm DatabaseCleaner.start cuối ' vào ' config.before (: mỗi) làm DatabaseCleaner.strategy =: transaction DatabaseCleaner.start kết thúc ' – Ryan

Trả lời

27

tôi để làm việc này bằng cách bao gồm Warden :: Test :: Helpers (mà đưa ra sử dụng đằng sau hậu trường)

require 'spec_helper' 
include Warden::Test::Helpers 

describe "...Whatever..." do 

    before(:each) do 
    @user = Factory.create(:user) 
    login_as @user, :scope => :user 
    end 
    ... 

tìm thấy giải pháp từ đây: http://blog.joshmcarthur.com/2011/06/11/integration-tests-with-devise-and-rspec/

+0

Làm việc tuyệt vời. Cảm ơn! – PetrolMan

+0

Cũng làm việc với 'minitest' với tôi. Cảm ơn! –

+0

nhưng điều này không kiểm tra kịch bản gửi biểu mẫu thực tế đúng không? – emaillenin

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