RSpec + 水豚 + 货币:current_user?
RSpec + Capybara + Devise: current_user?
- rails (5.1.4)
- rspec-rails (3.7.2)
- 水豚 (2.16.1)
- 设计 (4.3.0)
我正在尝试创建 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 有缺陷。
根据您给出的描述,可能有多种原因导致用户未实际登录,但最有可能的两个原因是
你真的在 Devise 中配置了多个作用域吗?或者它应该只是 login_as(admin, :scope => :user)
# 相当于 login_as(admin)
puma
运行您的测试是在单一模式还是集群模式下? (您可能需要禁用 puma 输出的静音 rspec-rails 默认执行 -https://github.com/rspec/rspec-rails/blob/95f4522c0549a32de59c19eb9b5f9a72126a9eb6/lib/rspec/rails/example/system_example_group.rb#L72 - 以在测试输出中看到它)如果它不处于单一模式,则应用程序是运行 处于与测试不同的进程中,这意味着 Devise 实际上不能短路登录,您需要修复 puma 配置。
- rails (5.1.4)
- rspec-rails (3.7.2)
- 水豚 (2.16.1)
- 设计 (4.3.0)
我正在尝试创建 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 有缺陷。
根据您给出的描述,可能有多种原因导致用户未实际登录,但最有可能的两个原因是
你真的在 Devise 中配置了多个作用域吗?或者它应该只是
login_as(admin, :scope => :user)
# 相当于 login_as(admin)puma
运行您的测试是在单一模式还是集群模式下? (您可能需要禁用 puma 输出的静音 rspec-rails 默认执行 -https://github.com/rspec/rspec-rails/blob/95f4522c0549a32de59c19eb9b5f9a72126a9eb6/lib/rspec/rails/example/system_example_group.rb#L72 - 以在测试输出中看到它)如果它不处于单一模式,则应用程序是运行 处于与测试不同的进程中,这意味着 Devise 实际上不能短路登录,您需要修复 puma 配置。