2014-11-07 10 views
7

Tôi có một tùy chọn được xác định trong cấu hình ứng dụng. Lớp tôi muốn kiểm tra được định nghĩa trong một viên ngọc (không phải do tôi viết). Tôi muốn mở lại các lớp:RSpec: Giá trị Rails.application.config đang ráo riết không hoạt động khi mở lại các lớp học?

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 

Tôi muốn thử nghiệm mã này sử dụng 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 

Làm thế nào để còn sơ khai giá trị ứng dụng cấu hình trước khi chạy đoạn code đó mở lại một lớp.

Trả lời

4

Wow, điều này đã ở đây trong một thời gian dài, nhưng trong trường hợp của tôi những gì tôi đã làm là:

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

Specs đi qua và cấu hình các giá trị stubed một cách chính xác. =)

Bây giờ, điều khác là về việc triển khai của bạn, tôi nghĩ sẽ tốt hơn nếu bạn xác định cả hai phương pháp và bên trong từ một số run hoặc thứ gì đó bạn quyết định thực hiện. Một cái gì đó như thế này:

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 

Hy vọng điều này sẽ hữu ích.

Chỉnh sửa: Ồ vâng, xấu của tôi, tôi dựa trên câu trả lời của tôi về số one này.

Các vấn đề liên quan