为什么要从gemspec文件中排除测试?

时间:2015-07-15 02:27:47

标签: ruby rubygems bundler

Bundler's gemspec template提供以下内容作为指定gems文件的默认值:

spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }

还会包含许多其他(看似无关紧要的)文件,例如.gitignore和.travis.yml文件,为什么要排除测试?

我已经看到other high-profile gems也忽略了测试文件。

1 个答案:

答案 0 :(得分:2)

除了保存关于gem的任意元数据之外,Gemspec做的一件重要事情是告诉Rubygems构建gem所需的文件。

我认为Bundler建议排除测试,因为它们不是构建或运行gem所需的功能代码。在Ruby世界中包含每个Gem的每个测试套件都会很昂贵。没有令人信服的理由需要从您的应用程序中访问Omniauth的测试。

测试很重要,这就是为什么它们作为存储库的一部分存在的原因。它们在生产中不是必需的,因此它们不会被包含在您从Rubygems下载的包中。

对于.gitignore.travis.yml,您可以自行排除这些内容。我不认为Bundler团队试图考虑每种情况,只考虑最可能的情况。