我正在开发一个gem,我的Gemfile看起来像这样:
source :rubygems
gemspec
group :development, :test do
gem "pry"
gem "debugger"
gem "rake"
end
但是,我不希望人们在运行测试时必须安装pry
和debugger
,但我也希望能够在我的测试中要求它们(因为我正在运行测试以bundle exec
为前缀,如果它们不在Gemfile中,我无法在加载路径中获取它们。我如何实现这一目标?
此外,何时将用于开发的宝石放入gemspec中,何时将它们放入Gemfile中?我真的不知道区别。
答案 0 :(得分:5)
您可以将gemspec作为开发依赖项添加到gemspec中,如下所示:
Gem::Specification.new do |s|
# ...
s.add_development_dependency 'pry'
s.add_development_dependency 'debugger'
s.add_development_dependency 'rake'
end
这些只会在处理gem时安装,而不是在安装gem本身时安装。
答案 1 :(得分:3)
正如@ andrew-vit所说,你可以将它作为开发依赖项添加到你的gem规范中
Gem::Specification.new do |spec|
#...
spec.add_development_dependency "pry"
spec.add_development_dependency "debugger"
#...
end
由于这将是一个开发依赖项,因此您不希望将require 'pry'
添加到主gem应用程序中,因此只需将其添加到spec_helper.rb
或任何测试设置文件中。
require 'rspec'
require 'vcr'
require 'pry'
#...
然后,当您运行规范时,仍然可以将binding.pry
添加到沙箱的代码中。在推送代码之前,请确保您的规范已运行。这样,如果它中断,你会发现你忘记了代码中的断点。
答案 2 :(得分:1)
我找到了解决方案。我可以把它们分组。
source :rubygems
gemspec
group :development, :test do
gem "rake"
end
gem "debugger", :group => :debugger
gem "pry", :group => :pry
这样贡献者可以选择不安装它们:
bundle install --without debugger pry
答案 3 :(得分:0)
对我而言,上述答案的混合似乎有效。我目前正在使用ruby 2.2.4并将其添加到.gempsec:
s.add_development_dependency 'pry-byebug'
s.add_development_dependency 'rake'
这适用于我的spec_helper.rb
:
require 'pry'
不确定这是否有助于任何人。