如何在开发gem时使用'debugger'和'pry'? (红宝石)

时间:2012-05-15 14:09:43

标签: ruby testing gem bundler gemspecs

我正在开发一个gem,我的Gemfile看起来像这样:

source :rubygems

gemspec

group :development, :test do
  gem "pry"
  gem "debugger"
  gem "rake"
end

但是,我不希望人们在运行测试时必须安装prydebugger,但我也希望能够在我的测试中要求它们(因为我正在运行测试以bundle exec为前缀,如果它们不在Gemfile中,我无法在加载路径中获取它们。我如何实现这一目标?

此外,何时将用于开发的宝石放入gemspec中,何时将它们放入Gemfile中?我真的不知道区别。

4 个答案:

答案 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'

不确定这是否有助于任何人。