2014-11-07 4 views
7

У меня есть опция, определенная в конфигурации приложения. Мой класс, который я хочу проверить, определяется в драгоценном камне (не написанном мной). Я хочу, чтобы снова открыть класс:RSpec: stubbing Значение Rails.application.config не работает при повторном открытии классов?

Myclass.class_eval do 

    if Rails.application.config.myoption=='value1' 
     # some code 
     def self.method1 
     end 
    else 
     # another code 
     def self.method2 
     end 
    end 
end 

Я хочу, чтобы проверить этот код с помощью RSpec 3:

# myclass_spec.rb 

require "rails_helper" 

RSpec.describe "My class" do 
    allow(Rails.application.config).to receive(:myoption).and_return('value1') 

    context 'in taxon' do 

    it 'something' do 
    expect(Myclass).to respond_to(:method1) 
    end 

    end 
end 

Как окурок значения приложения конфигурации перед запуском кода, который открывает заново класс.

ответ

4

Вау, это было здесь в течение длительного времени, но в моем случае то, что я сделал:

allow(Rails.configuration.your_config) 
    .to receive(:[]) 
    .with(:your_key) 
    .and_return('your desired return') 

функции передачи и конфигурации значения stubed правильно. =)

Теперь, о вашей реализации, я думаю, было бы лучше, если бы вы определили оба метода и внутри от run или что-то, что вы решили выполнить. Что-то вроде этого:

class YourClass 
    extend self 

    def run 
    Rails.application.config[:your_option] == 'value' ? first_method : second_method 
    end 

    def first_method 
    # some code 
    end 

    def second_method 
    # another code 
    end 
end 

Надеюсь, это поможет.

Редактировать: О да, мой плохой, я основывал свой ответ на этом one.

Смежные вопросы