2

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

source :rubygems

gemspec

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

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

另外,何时将我用于开发的 gem 放入 gemspec 中,何时将它们放入 Gemfile?我真的不知道有什么区别。

4

4 回答 4

6

您可以将 gems 作为开发依赖项添加到 gemspec 中,如下所示:

Gem::Specification.new do |s|
  # ...
  s.add_development_dependency 'pry'
  s.add_development_dependency 'debugger'
  s.add_development_dependency 'rake'
end

这些只会在使用 gem 时安装,而不是在安装 gem 本身时安装。

于 2013-02-13T21:15:39.553 回答
4

正如@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的代码添加到沙箱的代码中。在推送代码之前确保您的规范运行。这样,如果它中断,您会看到您忘记了代码中的断点。

于 2015-02-02T19:04:37.417 回答
1

我找到了解决方案。我可以把它们分组。

source :rubygems

gemspec

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

gem "debugger", :group => :debugger
gem "pry",      :group => :pry

这样,贡献者可以选择不安装它们:

bundle install --without debugger pry
于 2012-05-15T15:43:36.347 回答
1

对我来说,上述答案的混合似乎有效。我目前正在运行 ruby​​ 2.2.4 并将其添加到 .gempsec:

s.add_development_dependency 'pry-byebug'
s.add_development_dependency 'rake'

这对我来说spec_helper.rb

require 'pry'

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

于 2016-02-07T17:35:31.863 回答