Проверьте, не выйдет ли пользователь в разработке
Я пытаюсь проверить, был ли администратор подписан в тесте 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)
Ответ 2
it "should have a current_user" do
subject.current_user.should_not be_nil
end
Найдено https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-%28and-rspec%29
Ответ 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
Ответ 4
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
Вы можете сослаться на эту ссылку разработать вспомогательную ссылку spec