Ruby 是否应该在打包的gem中包含测试?

Ruby 是否应该在打包的gem中包含测试?,ruby,rubygems,Ruby,Rubygems,我一直在查阅文档和著名的gems示例,寻找一个简单问题的答案: 是否应该在打包的gem中包含测试,如果是,为什么? 换一种方式,您是否将测试文件添加到文件gempec属性,以及是否通过添加开发依赖项包含测试依赖项?如果是,为什么 对我来说,测试gem并将测试包含在gem的源代码库中是非常有意义的。对我来说,将测试与打包在gem中的已部署源代码一起包含是没有意义的。有没有标准的方法让人们使用rubygems的测试 这就是说,似乎许多主要项目都包含测试,所以我必须遗漏一些东西,对吗?没有必要在gem

我一直在查阅文档和著名的gems示例,寻找一个简单问题的答案:

是否应该在打包的gem中包含测试,如果是,为什么? 换一种方式,您是否将测试文件添加到
文件
gempec属性,以及是否通过
添加开发依赖项
包含测试依赖项?如果是,为什么

对我来说,测试gem并将测试包含在gem的源代码库中是非常有意义的。对我来说,将测试与打包在gem中的已部署源代码一起包含是没有意义的。有没有标准的方法让人们使用rubygems的测试


这就是说,似乎许多主要项目都包含测试,所以我必须遗漏一些东西,对吗?

没有必要在gem文件中包含测试。然而,如果测试文件很小(它们可能很小),那么这没什么大不了的

长期以来,当使用命令
bundle gem mygemname
创建新gem时,生成的
gempec
中包含以下行:

Gem::Specification.new do |s|
  # ...
  s.files = `git ls-files -z`.split("\x0")
  s.test_files = s.files.grep(/^(test|spec|features)\//)
  # ...
end
由于您的测试已经包含在
test\u文件中
,因此它们是否也包含在
文件中并不重要

但是,如果您今天运行相同的命令
bundle gem mygemname
,那么您将在生成的
gempec
文件中看到这一行:

Gem::Specification.new do |s|
  # ...
  s.files  = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
  # No mention of s.test_files !
  # ...
end
什么改变了

嗯,
s.test\u文件
现在几乎被弃用。RubyGems中存在不安装test_文件的漏洞,由于“向后兼容性”,该漏洞被推迟到2.x之后的RubyGems版本。它还可以在安装Gem时运行测试,使用
Gem install-t gemname
;这项功能现在已经实现(请参见bug#25707)


我相信,这就是为什么在源代码中仍然可以看到很多包含测试文件的gem。但是再也没有必要包括它们了。

如果你有庞大的测试文件,也许没有,那么保持
.gem
内存占用的精简。如果它们很小,为什么不呢?为什么是?如果用户没有简单的方法来运行保证工作的gem测试(即rubygems不包括调用gem测试的已知钩子),那么它们有什么用处呢?如果它们的大小很小,别担心,再多6 KB的代码也不会杀死任何人。如果它们很大,不要费心把它们包括在内。宝石中有很多垃圾,测试通常是最后一个。