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

时间:2015-12-14 03:06:04

标签: ruby-on-rails ruby rspec

我有一个方法,包含以下行:

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' } }

但是我收到了错误。

2 个答案:

答案 0 :(得分:4)

我认为存根配置不是一个好主意,因为很可能在您实际到达测试中的任何内容之前会加载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

设置文件

答案 1 :(得分:1)

尝试:

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

allow(Rails.application).to ...