作为RSpec的一部分,我需要引用我依赖的gem中包含的文件(称之为gem foo)。我控制gem foo,所以我可以根据需要对它进行更改。
Gem'foo'包含一个我需要在rspec规范中引用的文件。 是否有一个相当稳定的RubyGem或Bundler API来计算'foo'基目录?
假设我的Gemfile中已经需要'foo': Gemfile中的:
gem 'foo'
我想做这样的事情(在something_spec.rb中):
filename = File.expand_path('examples/xml/result.xml', Gem.gem_base_path('foo'))
什么是gem_base_path API调用?
答案 0 :(得分:2)
我建议在gem中创建一个函数来执行此操作:
module Foo
class Configuration
def self.result_xml_path
File.realpath("../examples/xml/result.xml")
end
end
end
然后,您可以在规范中执行以下操作:
filename = Foo::Configuration.result_xml_path
由于您从gem获取所有信息,因此更加安全。它看起来也更清洁。
答案 1 :(得分:0)
如果没有蚂蚁需要触摸'foo'
gem:
matches = Gem::Specification.find_all_by_name 'foo'
spec = matches.first
filename = File.expand_path('examples/xml/result.xml', spec.full_gem_path)
我已经使用这段代码来制作类似于你需要的东西(即在我的规范中加载我的项目使用的gem中定义的一些工厂)