【问题标题】:Devise logs out current user on redirect during rspec feature test在 rspec 功能测试期间,设计在重定向时注销当前用户
【发布时间】:2016-05-09 15:08:31
【问题描述】:

我在编写 rspec 功能测试时遇到问题,该测试使用设计对应用程序进行身份验证并创建记录。

点击提交以创建记录时,在重定向时,我已退出会话。

我似乎在日志文件中找不到任何奇怪的东西,我能够使用 selenium-webdriver 和 chromedriver-helper 重现此问题。

我想知道是否有其他人遇到过这个问题以及您如何解决它。

我的环境:

  • 导轨 4.2.6
  • 设计 3.5.6
  • selenium-webdriver 2.53.0
  • chromedriver-helper 1.0.0
  • rspec-rails 3.4.2
  • 水豚2.7.0

spec/support/devise.rb

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

spec/features/notes/create_note_spec.rb:

require 'rails_helper'

feature 'note management' do
  scenario 'user can create a new note' do
    visit root_path
    click_link 'Sign In'
    fill_in 'user_email', with: user.email
    fill_in 'user_password', with: CONFIG[:test_user_password]
    click_button 'Log in'
    click_link 'Notes'
    click_link 'New Note'
    fill_in 'note_title', with: Faker::Lorem.word
    fill_in 'note_content', with: Faker::Lorem.paragraph
    click_button 'Create Note'
    expect(page).to have_content 'Note created'
  end
end

【问题讨论】:

    标签: ruby-on-rails rspec devise


    【解决方案1】:

    我认为您需要启用 Warden 测试模式才能使其正常运行。

    查看wiki page

    【讨论】:

    • 我确实看过那个 wiki 页面。从它所读的内容来看,如果我不想为我创建的每个功能测试完成登录过程,则可以选择启用 Warden 测试模式。我实际上想通过该过程,并且 Warden 测试模式对用户进行存根,以便它绕过登录过程(如果我理解正确的话)。以防万一,我确实将守望者代码添加到支持文件并再次运行我的规范。我遇到了同样的问题。 RSpec 告诉我测试失败,输出我需要登录。
    • 当时可能会失败的各种事情。用户名和密码可能设置不正确,根路径也可能被限制访问并且重定向未正确遵循,您可以在代码中乱扔一些屏幕截图语句以查看发生了什么。除此之外,从速度的角度来看,绕过功能规范的登录机制并单独为登录设置一个规范是有意义的。如果您登录每一个规范,您的测试将永远持续下去。
    • 用户名和密码没问题,因为我可以登录并完成测试。它只是导致会话注销发生的表单提交和重定向。我用最少的代码从一个香草应用程序中尝试了这个,我得到了相同的结果。我有authenticate_user! application_controller.rb 文件中的方法,因为我希望所有内容都提示登录,但如果我已经通过身份验证,那么我应该可以不受限制地访问整个应用程序。我尝试通过浏览器运行它并在每一步都使用 pry。一切似乎都很好。我真的很困惑。
    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 2014-07-10
    相关资源
    最近更新 更多