我正在使用RSpec在Rails上测试我的类。
我想知道测试调用私有方法的方法有什么好方法。
例如我有这个课程:
Class Config
def configuration(overrides)
@config.merge(overrides)
end
private
def read_config_from_yml
@config ||= YAML.load()...
end
end
要测试配置方法,我们需要以某种方式模拟read_config_from_yml方法。我知道简单地模拟私有方法read_config_from_yml
或实例变量@config
并不好,因为这会弄乱对象的内部。
我能想到的是:
make read_config_from_yml public
为config添加setter方法(以避免模拟实例变量)
这些是黑客吗?还有其他想法吗?
答案 0 :(得分:0)
一个想法是在测试中实际创建YAML文件的副本。您可以获取您在生产代码中使用的文件片段,将其写入预期的文件位置并在测试完成后将其删除。
before do
File.open(file_path_here, 'w+') do |f|
f << <<-eof
config:
setting1: 'string'
setting2: 0
eof
end
end
after do
File.delete(file_path_here)
end
it 'does the thing' do
...
end
这样可以避免任何存根,并允许您将方法保密。