用 Rspec 存根对 Rails.application.config_for 的调用?

Dan*_*iel 2 ruby rspec ruby-on-rails

我有一个带有以下行的方法:

permissions = Rails.application.config_for(:admin_auth)
Run Code Online (Sandbox Code Playgroud)

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

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

我试过:

allow(Rails::Application).to receive(:config_for) { { admin: 'super_admin' } }
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误。

Hoa*_*han 5

我认为存根配置不是一个好主意,因为很可能在你真正开始测试之前就加载了 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' })
Run Code Online (Sandbox Code Playgroud)

2.根据Flexible Rails环境配置设置文件