Devise + RSpec + Capybara:测试用户登录时是否成功创建了新会话

柯蒂·索拉特(Kirti Thorat)

在我的Rails应用程序中,我正在使用Devise用户身份验证。当用户登录到应用程序时,Devise对该用户进行身份验证并为该特定用户创建会话。

我需要测试,当用户登录时,会为该用户创建一个会话。我怎么做?

在接受测试中,如果我做类似的事情,

    feature 'User logs in' do
      scenario 'with valid email and password' do
        log_in_with '[email protected]', 'password'

        expect(page).to have_content('Log out')
      end

      def log_in_with(email, password)
        visit new_user_session_path
        fill_in 'Email', with: email
        fill_in 'Password', with: password
        click_button 'Log in'
      end
    end

我仍然没有检查是否为登录用户创建了新会话。这不符合我的要求,因为我没有检查是否创建了实际的用户会话。

现在,如果我warden改用:

    user = FactoryGirl.create(:user)
    login_as(user, :scope => :user)
    ...

我只是说用户要登录,然后转到下一步,例如检查“注销”链接或“编辑配置文件”链接,但不检查用户的会话创建。

如果我在控制器规格中执行此操作,则可以访问sign_insign_out方法:

    describe Devise::SessionsController do

      it "user signed in successfully" do
        logged_user = User.create(:email => "[email protected]", :password => "12345678")

        sign_in logged_user

        expect(controller.user_session).not_to be nil

      end
    end

在这里,我有机会获得user_sessioncurrent_useruser_signed_in?方法。在这3个选择中,我选择了user_session因为它似乎与当前用户会话相关。这是正确的方法吗?还是有另一种替代方法或直接方法可用于检查会话是否处于活动状态或已为用户创建?有没有办法在我的验收测试中检查这种情况?

吉尔赫姆·佛朗哥(Guilherme Franco)

我很确定您可以使用Controller规范中的会话哈希访问所有会话数据。假设您可以使用它来检查登录后是否设置了user_id会话密钥:

expect(session[:user_id]).to_not be_nil

而且,当然,您可以使用它来检查可能在整个应用程序中添加的任何会话。

如果您确实想查看由Devise创建的会话,则可以访问在会话中生成的Warden密钥:

expect(session["warden.user.user.key"][0].first).to eql logged_user.id

这是不必要的,因为这已在Devise中进行过测试,因此仅在用户登录时进行测试就足够了。

有一个伟大的职位有关测试Omniauth控制器,也用于测试SessionsController一个很好的指南。它使用RSpec的旧的should语法,但是应该可以理解= P

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Devise + RSpec:如何验证用户身份?

来自分类Dev

Factory Girl Devise用户工厂无效-未通过RSpec测试

来自分类Dev

如何使用RSpec使用正确的密码创建Devise用户

来自分类Dev

如何使用RSpec使用正确的密码创建Devise用户

来自分类Dev

使用Devise的Rails 4,使用Rspec测试控制器

来自分类Dev

Rails 4 + Devise:如何编写不带RSpec的Devise Reset Password的测试?

来自分类Dev

Devise + RSpec : How to authenticate a user?

来自分类Dev

无法通过集成测试(rspec / email-spec / capybara / devise)确认电子邮件

来自分类Dev

测试Devise使用Rspec更新用户注册信息并获取:ActionController :: UnknownFormat:错误

来自分类Dev

Rspec测试以检查用户是否填充了自填充的ip_location属性(Rails 4 / devise / geocoder)

来自分类Dev

Rspec和Devise 4.2:模型测试中曾经有效的ArgumentError

来自分类Dev

Rails 5 with Devise,使用 Rspec 测试控制器(销毁操作)

来自分类Dev

Devise + RSpec-注册验证错误

来自分类Dev

Devise + RSpec-注册验证错误

来自分类Dev

关于Rspec + Devise :: TestHelpers类型的说明

来自分类Dev

RSpec——测试是否创建了 cookie

来自分类Dev

使用Rspec测试Devise时,“ setup_controller_for_warden”错误中的“ nil:NilClass的未定义方法'env'”错误

来自分类Dev

Rails 4 + Rspec + Devise:控制器规格中用于sign_in用户的未定义方法'env'

来自分类Dev

与Devise集成的Bootstrap登录表单未创建新的用户会话

来自分类Dev

使用Devise测试成功登录

来自分类Dev

RSpec和Devise身份验证不起作用

来自分类Dev

Rails,Devise,Rspec:未定义的方法“ sign_in”

来自分类Dev

为什么我的RSpec无法加载Devise :: Test :: ControllerHelpers?

来自分类Dev

关闭来自Devise in test(Rspec)的电子邮件发送

来自分类Dev

RSpec和Devise身份验证不起作用

来自分类Dev

RSpec,Devise-找不到有效的映射错误

来自分类Dev

使用RSpec测试用户密码更新

来自分类Dev

Rails Devise检查用户是否尚未登录

来自分类Dev

Rails + Devise:如何检查登录时是否记住了用户

Related 相关文章

  1. 1

    Devise + RSpec:如何验证用户身份?

  2. 2

    Factory Girl Devise用户工厂无效-未通过RSpec测试

  3. 3

    如何使用RSpec使用正确的密码创建Devise用户

  4. 4

    如何使用RSpec使用正确的密码创建Devise用户

  5. 5

    使用Devise的Rails 4,使用Rspec测试控制器

  6. 6

    Rails 4 + Devise:如何编写不带RSpec的Devise Reset Password的测试?

  7. 7

    Devise + RSpec : How to authenticate a user?

  8. 8

    无法通过集成测试(rspec / email-spec / capybara / devise)确认电子邮件

  9. 9

    测试Devise使用Rspec更新用户注册信息并获取:ActionController :: UnknownFormat:错误

  10. 10

    Rspec测试以检查用户是否填充了自填充的ip_location属性(Rails 4 / devise / geocoder)

  11. 11

    Rspec和Devise 4.2:模型测试中曾经有效的ArgumentError

  12. 12

    Rails 5 with Devise,使用 Rspec 测试控制器(销毁操作)

  13. 13

    Devise + RSpec-注册验证错误

  14. 14

    Devise + RSpec-注册验证错误

  15. 15

    关于Rspec + Devise :: TestHelpers类型的说明

  16. 16

    RSpec——测试是否创建了 cookie

  17. 17

    使用Rspec测试Devise时,“ setup_controller_for_warden”错误中的“ nil:NilClass的未定义方法'env'”错误

  18. 18

    Rails 4 + Rspec + Devise:控制器规格中用于sign_in用户的未定义方法'env'

  19. 19

    与Devise集成的Bootstrap登录表单未创建新的用户会话

  20. 20

    使用Devise测试成功登录

  21. 21

    RSpec和Devise身份验证不起作用

  22. 22

    Rails,Devise,Rspec:未定义的方法“ sign_in”

  23. 23

    为什么我的RSpec无法加载Devise :: Test :: ControllerHelpers?

  24. 24

    关闭来自Devise in test(Rspec)的电子邮件发送

  25. 25

    RSpec和Devise身份验证不起作用

  26. 26

    RSpec,Devise-找不到有效的映射错误

  27. 27

    使用RSpec测试用户密码更新

  28. 28

    Rails Devise检查用户是否尚未登录

  29. 29

    Rails + Devise:如何检查登录时是否记住了用户

热门标签

归档