我正在构建一个引擎,我想使用VCR和Webmock进行测试。
创建引擎时生成的Gemfile中的文档似乎表明,所有引擎的Gem都应该通过gemspec加载,但唯一的选项是add_dependency和add_development_dependency。如果我使用后者,VCR和Webmock就会加载到我的开发环境中,然后我必须在开发环境中显式禁用Webmock。我宁愿不这么做,因为主机应用程序可能希望这些宝石在开发中发挥作用,而我的引擎禁用它们可能是出乎意料的。
显而易见的解决方案似乎是使用引擎的Gemfile:
group :test do
gem 'vcr'
gem 'webmock'
end
这是加载仅在测试引擎时使用的gem的正确方法吗?
有人这样做吗?
著名的rails引擎之一rails_admin(https://github.com/sferik/rails_admin)使用这种方法,所以我相信这可以被认为是一种很好的做法。
Rails应用程序和Rails应用程序的Rails引擎的加载顺序是什么?
我的猜测是Rails应用程序Gemfile是决定是否加载gem的因素。这可能值得在Rails测试应用程序中尝试一下。
我相信答案是,在引擎的Gemfile中声明gem并没有错,gem仅用于测试和调试引擎代码。此外,我认为Gemfile模板应该减少歧义,并提交了一个拉取请求:
https://github.com/rails/rails/pull/11881