Проверьте, не выйдет ли пользователь в разработке

Я пытаюсь проверить, был ли администратор подписан в тесте Rspec. Однако обычный signed_in? метод не может быть обнаружен из rspec и не является частью помощников RSpec Devise.

Что-то вроде этого - то, что у меня на месте

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

Есть ли способ проверить сеанс администратора и посмотреть, действительно ли он подписан или нет?

Ответ 1

Я думаю, что это действительно то, что вам нужно Как: Контролировать контроллеры с Rails 3 и 4 (и RSpec)

Просто проверьте current_user. Это должно быть nil

Добавить. Хорошая практика использует синтаксис, подобный этому

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

Ответ 3

Не новый ответ, действительно, но мой представитель недостаточно высок, чтобы комментировать...:

  • Если вы уже переопределили subject, контроллер доступен как controller в спецификациях контроллера, поэтому:

    expect { ... }.to change { controller.current_user }.to nil
    
  • Чтобы проверить конкретный пользователь, скажем, сгенерированный FactoryGirl, у нас был хороший успех:

    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