我在应用程序配置中定义了一个选项。我想要测试的类是在 gem 中定义的(不是我编写的)。我想重新开课:
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
如何在运行重新打开类的代码之前存根应用程序配置值。
哇,这已经存在很长时间了,但就我而言,我所做的是:
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 https://stackoverflow.com/a/11096074/2913037.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)