С добавленным генератором rspec-rails легко настроить RSpec для тестирования приложения Rails. Но как насчет добавления RSpec для тестирования гемов в разработке? Я не использую ювелирный или подобные инструменты. Я просто использовал Bundler ( bundle gem my_gem
), чтобы настроить структуру для нового драгоценного камня и отредактировать * .gemspec вручную. Я также добавил s.add_development_dependency "rspec", ">= 2.0.0"
в gemspec и сделал bundle install
.
Есть ли хороший урок, что делать дальше, чтобы заставить работать RSpec?
Ответы:
Я обновил этот ответ, чтобы соответствовать текущим лучшим практикам:
Bundler отлично поддерживает разработку гемов. Если вы создаете драгоценный камень, единственное, что вам нужно иметь в своем Gemfile, это следующее:
Это говорит Bundler, что нужно искать в вашем файле gemspec зависимости при запуске
bundle install
.Далее убедитесь, что RSpec является зависимостью разработки вашего гема. Отредактируйте gemspec так, чтобы он читал:
Затем создайте
spec/spec_helper.rb
и добавьте что-то вроде:Первые две строки говорят Bundler загружать только драгоценные камни внутри вашей gemspec. Когда вы устанавливаете свой собственный гем на свой компьютер, это заставит ваши спецификации использовать ваш текущий код, а не версию, которую вы установили отдельно.
Создайте спецификацию, например
spec/foobar_spec.rb
:Необязательно: добавьте
.rspec
файл для параметров по умолчанию и поместите его в корневой каталог вашего драгоценного камня:Наконец: запустите спецификации:
источник
rspec --init
rspec --init
не было доступно, когда я написал это, но хороший момент!Решение Iain выше прекрасно работает!
Если вы также хотите Rakefile, это все, что вам нужно:
Проверьте RDoc для RakeTask на наличие различных опций, которые вы можете при желании передать в определение задачи.
источник
Вы можете создать свой новый драгоценный камень с помощью rspec, запустив
bundler gem --test=rspec my_gem
. Никаких дополнительных настроек!Я всегда об этом забываю. Это реализовано здесь: https://github.com/bundler/bundler/blob/33d2f67d56fe8bf00b0189c26125d27527ef1516/lib/bundler/cli/gem.rb#L36
источник
--test=rspec
, но все равно спросил меня, хочу ли я использовать Rspec при запускеbundler gem my_gem
.Вот дешевый и простой (хотя официально не рекомендованный) способ:
Сделайте dir в корне вашего драгоценного камня под названием
spec
, поместите туда свои спецификации. Возможно, вы уже установили rspec, но если вы этого не сделаете, просто сделайте agem install rspec
и забудьте Gemfiles и bundler.Затем вы создадите спецификацию, и вам нужно указать ей, где находится ваше приложение, где находятся ваши файлы, и включить файл, который вы хотите протестировать (вместе со всеми имеющимися у него зависимостями):
Откройте Терминал и запустите rspec:
Если вам нужны некоторые
.rspec
параметры, создайте.rspec
файл и поместите его в корневой каталог вашего драгоценного камня. Моя выглядит так:Легко, быстро, аккуратно!
Мне это нравится, потому что вам вообще не нужно добавлять никаких зависимостей в ваш проект, и все это остается очень быстрым.
bundle exec
немного замедляет работу, что вам нужно сделать, чтобы убедиться, что вы используете одну и ту же версию rspec все время. Те 0,56 секунды, которые потребовались для запуска двух тестов, заняли 99% к тому времени, которое потребовалось моему компьютеру для загрузки rspec. Запуск сотен спецификаций должен быть чрезвычайно быстрым. Единственная проблема, с которой вы можете столкнуться, это то, о чем я знаю, если вы измените версии rspec, и новая версия не будет обратно совместима с какой-то функцией, которую вы использовали в своем тесте, вам, возможно, придется переписать некоторые тесты.Это хорошо, если вы выполняете разовые спецификации или у вас есть веская причина НЕ включать rspec в ваш gemspec, однако это не очень хорошо для обеспечения совместного использования или обеспечения совместимости.
источник
Thing = AwesomeGem::Awesome
или вы можете выполнить тест внутри модуля, напримерmodule AwesomeGem; it 'stuff' do; Awesome.new ... end; end