我一直在寻找文档和示例着名的宝石来回答一个简单的问题:
以不同的方式,您是否将测试文件添加到files
gemspec属性,是否通过add_development_dependencies
包含测试依赖项?如果是这样,为什么?
测试宝石并在gem的源代码库中包含测试对我来说非常有意义。包含测试以及在gem中打包的已部署源代码对我来说没有多大意义。是否有一种标准手段供人们使用来自rubygems的宝石测试?
那就是说,似乎许多重大项目都包括测试,所以我必须遗漏一些东西,对吗?
答案 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)。
我相信,这也是为什么你仍然会看到许多包含在源代码中的测试文件的宝石。但是不再包括他们在内的任何一点。