2015-07-15 2 views
1

Bundler's gemspec template предоставляет следующие по умолчанию для задания драгоценных камней файлы:Зачем исключать тесты из файлов gemspec?

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

будет включен Много других (казалось бы, несущественных) файлы как .gitignore и .travis.yml файл, так почему исключающие тесты ?

Я видел otherhigh-profilegems также игнорировать тестовые файлы.

ответ

2

Помимо хранения произвольных метаданных о драгоценном камне, одна важная вещь, которую делает Gemspec, - это указать Rubygems, какие файлы необходимы для создания вашего драгоценного камня.

Я думаю, что Bundler рекомендует исключать тесты, потому что они не являются функциональным кодом, который необходим для создания или запуска вашего драгоценного камня. Включение каждого набора тестов для каждого Gem в вселенной Ruby будет дорогостоящим. Нет никакой веской причины, по которой вам нужно было бы получить доступ к тестам Omniauth из вашего приложения.

Тесты важны, и именно поэтому они существовали как часть хранилища. Они просто не нужны в производстве, поэтому они не обернуты в пакет, который вы загружаете из Rubygems.

Что касается .gitignore и .travis.yml, вы можете исключить их самостоятельно. Я не думаю, что команда Бундлера пыталась задуматься о каждом сценарии, а скорее о наиболее вероятных.

+0

Любопытно, что [Руководство по спецификации RubyGems] (http://guides.rubygems.org/specification-reference/#files) включает тесты. – fny

+0

Да, я согласен. Я не думаю, что есть один правильный ответ. –