rubygems / 仅为测试添加运行时依赖项(或任何给定的环境)

rubygems / add runtime dependency only for test (or any given env)

目前正在研究扩展规范功能的 gem(它需要 factory_bot),如何在 add_runtime_dependency 中仅针对相关组定义它(这里,:test) ?

或者,如果用户未在其项目中添加相关依赖项,让 gem 引发是否是更好的做法?

如果您的 gem 具有运行时依赖性,它应该按原样列在 gem 规范中 是什么允许 Bundler 进行依赖项解析以查看您的 gem 是否与 Gemfile 中的其他 gem 兼容。

最终用户可以将您的 gem 放入 Gemfile 的组中。如果他们将它放在 :test 组中,它只会在测试环境中加载。如果他们没有阅读自述文件并将其放在主要组中,那么这不是你的问题。

Gem::Specification.new do |s|
  # ...
  s.add_dependency 'factory_bot', version
  # ...
end 

请注意,您还可以在 gem规范中列出开发依赖项。

Gem::Specification.new do |s|
  # ...
  s.add_development_dependency 'rubocop', '~> 0.44.1'
end

这些依赖项将在 developing/testing gem 本身时使用,但不会 "passed on" 当您通过捆绑程序安装 gem 时。

Is it a better practice to let the gem raise if the concerned dependency is not added by the user in its project ?

No. Ruby已经有很好的依赖解析器(Bundler)了。使用它。