2015-12-14 1 views
1

У меня есть метод со следующей строкой:Заблокировать вызов Rails.application.config_for с помощью 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' } } 

Но я получаю сообщение об ошибке.

ответ

4

Я думаю, гася конфиги не является хорошей идеей, так как вполне вероятно, что рельсы окр будет загружен, прежде чем вы на самом деле получить что-либо в тесте , Вы могли бы рассмотреть следующие решения для этого случая:

1.Separate разрешения в метод и незавершенный его

# code 
def permissions 
    Rails.application.config_for(:admin_auth) 
end 

# test 
allow(your_object).to receive(:permissions).and_return({ admin: 'super_admin' }) 

2.Setup файл в соответствии с Flexible Rails environment config

+0

Это выглядит как хорошее решение. Проблема в том, что мой объект является вспомогательным модулем под названием Admins :: AuthHelper и 'allow (Admins :: AuthHelper) .to receive (: permissions) .and_return ({admin: 'super_admin'})', похоже, не работает. – Daniel

+0

Если это вспомогательный метод представления, вы можете попробовать 'allow (helper) .to получать (: permissions) .and_return ({admin: 'super_admin'})' –

1

Try:

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

или

allow(Rails.application).to ...