【问题标题】:Stub a call to Rails.application.config_for with Rspec?使用 Rspec 存根对 Rails.application.config_for 的调用?
【发布时间】:2022-05-04 17:37:02
【问题描述】:

我有一个方法如下:

permissions = Rails.application.config_for(:admin_auth)

它读取文件config/admin_auth.yml 并返回一个哈希值,我稍后会在相同的方法中使用它。

问题是为了测试这个方法我需要给permissions不同的值但是我找不到存根Rails.application.config_for调用的方法。

我试过了:

allow(Rails::Application).to receive(:config_for) { { admin: 'super_admin' } }

但我得到一个错误。

【问题讨论】:

    标签: ruby-on-rails ruby rspec


    【解决方案1】:

    我认为存根配置不是一个好主意,因为 Rails env 很可能会在您实际进行测试之前加载。对于这种情况,您可以考虑以下解决方案:

    1.将权限分离到一个方法中并存根

    # code
    def permissions
      Rails.application.config_for(:admin_auth)
    end
    
    # test
    allow(your_object).to receive(:permissions).and_return({ admin: 'super_admin' })
    

    2.根据Flexible Rails environment config设置你的文件

    【讨论】:

    • 这看起来是个不错的解决方案。问题是我的对象是一个名为 Admins::AuthHelper 的辅助模块,allow(Admins::AuthHelper).to receive(:permissions).and_return({ admin: 'super_admin' }) 似乎不起作用。
    • 如果是view helper方法,可以试试allow(helper).to receive(:permissions).and_return({ admin: 'super_admin' })
    【解决方案2】:

    试试:

    allow_any_instance_of(Rails::Applcation).to ...
    

    allow(Rails.application).to ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      相关资源
      最近更新 更多