是否应该在打包的宝石中包含测试?

时间:2016-06-13 22:37:38

标签: ruby rubygems

我一直在寻找文档和示例着名的宝石来回答一个简单的问题:

是否应该在一个PACKAGED宝石中包含测试,如果是,为什么?

以不同的方式,您是否将测试文件添加到files gemspec属性,是否通过add_development_dependencies包含测试依赖项?如果是这样,为什么

测试宝石并在gem的源代码库中包含测试对我来说非常有意义。包含测试以及在gem中打包的已部署源代码对我来说没有多大意义。是否有一种标准手段供人们使用来自rubygems的宝石测试?

那就是说,似乎许多重大项目都包括测试,所以我必须遗漏一些东西,对吗?

1 个答案:

答案 0 :(得分:1)

您无需在gem文件中包含测试。但是,如果测试文件很小(可能是它们),那么这没什么大不了的。

很长一段时间,使用命令bundle gem mygemname创建新的gem时,生成的gemspec中包含以下行:

Gem::Specification.new do |s|
  # ...
  s.files = `git ls-files -z`.split("\x0")
  s.test_files = s.files.grep(/^(test|spec|features)\//)
  # ...
end

由于您的测试已经包含在test_files中,因此它们也包含在files中并不重要。

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

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_files现在几乎已弃用。 RubyGems中有一个open issue不能安装test_files,由于“向后兼容性”,它已被推迟到2.x之后的RubyGems版本。它曾经可以在安装Gem时运行测试,gem install -t gemname;此功能现已removed(请参阅错误#25707)。

我相信,这也是为什么你仍然会看到许多包含在源代码中的测试文件的宝石。但是不再包括他们在内的任何一点。