2012-06-22 33 views
10

Tôi đang cố gắng kiểm tra xem quản trị viên có đăng xuất trong thử nghiệm Rspec hay không. Tuy nhiên sign_in thông thường? phương pháp không thể được nhìn thấy từ rspec và không phải là một phần của RSpec Devise Helpers.Kiểm tra xem người dùng có được đăng xuất không theo quy định

Something như thế này là những gì tôi có tại chỗ

before (:each) do 
     @admin = FactoryGirl.create(:administrator) 
     sign_in @admin 
     end 


     it "should allow the admin to sign out" do 
     sign_out @admin 
     #@admin.should be_nil 
     #@admin.signed_in?.should be_false 
     administrator_signed_in?.should be_false 
     end 

Có anothe cách để kiểm tra các phiên họp của quản trị viên và xem nếu anh ta thực sự đăng nhập hay không?

Trả lời

8

Tôi nghĩ rằng nó thực sự những gì bạn cần How To: Test controllers with Rails 3 and 4 (and RSpec)

Chỉ cần kiểm tra current_user. Nó phải là nil

Thêm. thực hành tốt là sử dụng cú pháp như thế này

-> { sign_out @admin }.should change { current_user }.from(@admin).to(nil) 
+1

thực sự. Tôi vừa tìm thấy subject.current_administrator.should be_nil trong một số mã ruby ​​cũ. Tôi không có ý tưởng về chủ đề trước đó. Cảm ơn bạn. – Overtone

+0

Trong trường hợp của tôi cho ví dụ của bạn, nó sẽ không được current_administrator như quản trị viên là mô hình được sử dụng và không phải là người dùng? – Overtone

+0

'current_user' là trợ giúp phát sinh. nó đề cập đến người dùng đã ký trong phiên hiện tại, bởi vì bạn không thể đăng nhập hai lần cùng lúc – caulfield

4

Không phải là một câu trả lời mới, thực sự, nhưng đại diện của tôi là không đủ cao để bình luận ...:

  • Nếu bạn đã ghi đè subject, bộ điều khiển có sẵn dưới dạng controller trong thông số bộ điều khiển, vì vậy:

    expect { ... }.to change { controller.current_user }.to nil 
    
  • Để kiểm tra cho một người dùng cụ thể, nói được tạo ra bởi FactoryGirl, chúng tôi đã thành công tốt đẹp với:

    let(:user) do FactoryGirl.create(:client) ; end 
    ... 
    it 'signs them in' do 
        expect { whatever }.to change { controller.current_user }.to user 
    end 
    
    it 'signs them out' do 
        expect { whatever }.to change { controller.current_user }.to nil 
    end 
    
-1
 
it "signs user in and out" do 
    user = User.create!(email: "[email protected]", password: "very-secret") 
    sign_in user 
    expect(controller.current_user).to eq(user) 

    sign_out user 
    expect(controller.current_user).to be_nil 
end 

Bạn có thể tham khảo link này devise spec helper link

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