RSpec + 水豚 + 货币:current_user?

RSpec + Capybara + Devise: current_user?

我正在尝试创建 RSpec Rails 3.7 系统规范,如 https://relishapp.com/rspec/rspec-rails/v/3-7/docs/system-specs/system-spec 中所述。

另外我想申请Devise授权。我按照说明 https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara

但我想这是一个有缺陷的实现。我没有得到 current_user 方法(即 nil)。

这是我的简单说明:

require 'rails_helper'

RSpec.describe "testing system", type: :system do

  it "tests the spec" do

    admin = create(:admin) # user-admin

    login_as(admin, :scope => :admin)

    visit root_path

    click_link 'Home'

    save_and_open_page

  end
end

由于我网站上的代码在很大程度上取决于 current_user 值,我没有得到格式正确的已保存页面(看起来用户没有登录)。

我该怎么办?我是否应该尝试简单地手动(以某种方式?)为 current_user 分配一个值?或者也许 https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara 策略主要是有缺陷的,应该用更成熟的技术代替?

我已经试过了

current_user = admin

在我的代码中 - 但没有结果。

devise wiki 对于如何在快捷登录时进行测试是正确的,不,你不能只在你的测试代码中设置 current_user(你也不能访问它,因为它只在请求中设置)。通常假设错误出在您对 gem 的使用上,而不是广泛使用且经过高度测试的 gem 有缺陷。

根据您给出的描述,可能有多种原因导致用户未实际登录,但最有可能的两个原因是

  1. 你真的在 Devise 中配置了多个作用域吗?或者它应该只是 login_as(admin, :scope => :user) # 相当于 login_as(admin)

  2. puma运行您的测试是在单一模式还是集群模式下? (您可能需要禁用 puma 输出的静音 rspec-rails 默认执行 -https://github.com/rspec/rspec-rails/blob/95f4522c0549a32de59c19eb9b5f9a72126a9eb6/lib/rspec/rails/example/system_example_group.rb#L72 - 以在测试输出中看到它)如果它不处于单一模式,则应用程序是运行 处于与测试不同的进程中,这意味着 Devise 实际上不能短路登录,您需要修复 puma 配置。