代码之家  ›  专栏  ›  技术社区  ›  prograils

RSpec+水豚+设备:当前用户?

  •  1
  • prograils  · 技术社区  · 7 年前
    • 钢轨(5.1.4)
    • rspec钢轨(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 .

    此外,我想申请设计授权。我遵守了指示 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
    

    因为我网站上的代码在很大程度上取决于 当前\u用户 值,我没有获得格式正确的保存页面(看起来用户没有登录)。

    我该怎么办?我是否应该尝试手动(以某种方式?)为指定值 当前\u用户 ? 或者可能是 https://github.com/plataformatec/devise/wiki/How-To:-水豚试验 策略主要是有缺陷的,应该用更成熟的技术来替代?

    我已经试过了

    current_user = admin
    

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   Thomas Walpole    7 年前

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

    根据您给出的描述,可能有很多原因导致它没有实际登录用户,但最可能的两个罪魁祸首是

    1. 您是否确实在Deviate中配置了多个作用域?还是应该这样 login_as(admin, :scope => :user) #相当于仅登录为(admin)

    2. puma 在单一模式或群集模式下运行测试?(默认情况下,您可能需要禁用puma输出rspec rails的静音功能- https://github.com/rspec/rspec-rails/blob/95f4522c0549a32de59c19eb9b5f9a72126a9eb6/lib/rspec/rails/example/system_example_group.rb#L72 -要在测试输出中看到这一点),如果它不是在单一模式下,那么该应用程序将在与测试不同的单独进程中运行,这意味着designe实际上无法缩短登录,您需要修复puma配置。