2012-03-06 23 views
17

Tôi đang di chuyển standart Rails đơn vị kiểm tra của tôi để RSpec và tôi có vấn đề với lập. Tất cả bộ điều khiển chứa xác thực xác thực đều thất bại với RSpec.RSpec và đưa ra: không thể sign_in admin

tôi cố gắng sign_in một admin trong RSpec sau hướng dẫn devise, nhưng không thành công:

https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-(and-rspec)

Đây là những gì tôi đã cố gắng:

/spec/controllers/ipad_tech_infos_controller_spec.rb

before :each do 
    @request.env["devise.mapping"] = Devise.mappings[:admin] 
    @admin = FactoryGirl.create :admin 
    sign_in @admin 
end 

/spec/support/devise.rb

RSpec.configure do |config| 
    config.include Devise::TestHelpers, :type => :controller 
end 

/spec/factories/admin.rb

FactoryGirl.define do 
    factory :admin do 
    email "[email protected]" 
    password "foobar" 
    password_confirmation {|u| u.password} 
    end 
end 

mô hình của tôi là không confirmable, tất cả các bộ điều khiển spec của tôi đang thất bại.

Nếu tôi xóa before_filter: authenticate_admin! sau đó tất cả các bài kiểm tra của tôi vượt qua.

Ai đó có thể trợ giúp?

Trả lời

21

Có khả năng thủ phạm: Đảm bảo bạn không đặt phiên rõ ràng trong thông số bộ điều khiển của mình.

Ví dụ: nếu bạn đang sử dụng trình tạo giàn giáo Rspec mặc định, thông số bộ điều khiển được tạo sẽ truyền theo thông số phiên.

get :index, {}, valid_session 

Đây là ghi đè các biến phiên mà người giúp đỡ của Devise đặt để đăng nhập bằng Warden. Giải pháp đơn giản nhất là xóa chúng:

get :index, {} 

Hoặc, bạn có thể đặt thông tin phiên Warden theo cách thủ công, thay vì sử dụng trình trợ giúp của Devise.

+0

Nhờ đó là nó! – vdaubry

+0

Ngoài ra, nếu quản trị viên của bạn được lồng trong Nhà máy của người dùng, bạn cần gọi nó như sau: 'sign_in: user, @ admin', có nghĩa là' sign_in (scope, resource) ' – Arel

3

Bạn nói "Mô hình của tôi không được xác nhận" nên những điều sau không áp dụng cho bạn, nhưng có một sự tinh tế ở đây mà những người khác có thể bỏ lỡ, như tôi đã làm (và lãng phí một giờ).

Lưu ý trong RSpec/lập mưu như thế nào-To vdaubry đề cập đến ở trên, nó nói nếu bạn có những lập mưu "confirmable" mô-đun cho phép trong mô hình của bạn, sau đó hoặc là bạn cần phải gọi @admin.confirm! ngay trước sign_in @admin, nếu không chắc chắn nhà máy của bạn đặt confirmed_at khi tạo số @admin của bạn. Nếu bạn không thực hiện việc này, cuộc gọi sign_in sẽ tự động không thành công và tất cả thông số kỹ thuật tiếp theo sẽ hoạt động như bạn chưa đăng nhập.

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