Настройка RSpec для тестирования драгоценного камня (не рельсы)
Это довольно легко с добавленным генератором rspec-rails для настройки RSpec для тестирования приложения Rails. Но как насчет добавления RSpec для тестирования драгоценного камня в разработке?
Я не использую ювелира или такие инструменты. Я просто использовал упаковщик (bundle gem my_gem) для настройки структуры для нового драгоценного камня и редактирования *.gemspec вручную.
Я также добавил s.add_development_dependency "rspec", ">= 2.0.0" к gemspec и сделал bundle install.
есть ли хороший учебник, что делать дальше, чтобы заставить RSpec работать?
4 ответов:
я обновил этот ответ, чтобы соответствовать текущей передовой практике:
Bundler отлично поддерживает разработку драгоценных камней. Если вы создаете драгоценный камень, то только то, что вам нужно иметь в своем Gemfile, это следующее:
source "https://rubygems.org" gemspecэто говорит Bundler, чтобы посмотреть внутри вашего файла gemspec для зависимостей при запуске
bundle install.далее, убедитесь, что RSpec является зависимостью развития вашего драгоценного камня. Отредактируйте gemspec так, чтобы он читает:
spec.add_development_dependency "rspec"далее создать
spec/spec_helper.rbи добавить что-то вроде:require 'bundler/setup' Bundler.setup require 'your_gem_name' # and any other gems you need RSpec.configure do |config| # some (optional) config here endпервые две строки говорят Bundler загружать только драгоценные камни внутри вашего gemspec. Когда вы устанавливаете свой собственный драгоценный камень на своей собственной машине, это заставит ваши спецификации использовать ваш текущий код, а не версию, которую вы установили отдельно.
создать спецификацию, например
spec/foobar_spec.rb:require 'spec_helper' describe Foobar do pending "write it" endдополнительно: добавить
.rspecфайл для параметров по умолчанию и поместите его в свой драгоценный камень корневой путь:--color --format documentationнаконец-то: выполните технические характеристики:
$ rspec spec/foobar_spec.rb
решение Iain выше отлично работает!
Если вы также хотите Rakefile, это все, что вам нужно:
require 'rspec/core/rake_task' RSpec::Core::RakeTask.new(:spec) # If you want to make this the default task task default: :specПроверьте RDoc для RakeTask для различных параметров, которые можно дополнительно передать в определение задачи.
вы можете создать свой новый драгоценный камень с помощью rspec, запустив
bundler gem --test=rspec my_gem. Никаких дополнительных настроек!Я всегда забываю об этом. Это реализовано здесь: https://github.com/bundler/bundler/blob/33d2f67d56fe8bf00b0189c26125d27527ef1516/lib/bundler/cli/gem.rb#L36
вот дешевый и простой (хотя официально не рекомендуется) способ:
сделайте dir в корне вашего драгоценного камня под названием
spec, положите свои спецификации туда. Вероятно, у вас уже установлен rspec, но если вы этого не сделаете, просто сделайтеgem install rspecи забудьте Gemfiles и bundler.Далее вы создадите спецификацию, и вам нужно сказать ей, где находится ваше приложение, где находятся ваши файлы, и включить файл, который вы хотите проверить (вместе с любыми зависимостями, которые он имеет):
# spec/awesome_gem/awesome.rb APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..')) $: << File.join(APP_ROOT, 'lib/awesome_gem') # so rspec knows where your file could be require 'some_file_in_the_above_dir' # this loads the class you want to test describe AwesomeGem::Awesome do before do @dog = AwesomeGem::Awesome.new(name: 'woofer!') end it 'should have a name' do @dog.name.should eq 'woofer!' end context '#lick_things' do it 'should return the dog\'s name in a string' do @dog.lick_things.should include 'woofer!:' end end endоткрыть Терминал и запустить rspec:
~/awesome_gem $ rspec .. Finished in 0.56 seconds 2 examples, 0 failuresесли ты хочешь
.rspec"параметры" любовь, пойди и сделай.rspecфайл и поместите его в корневой путь вашего драгоценного камня. Мой выглядит так:# .rspec --format documentation --color --debug --fail-fastлегко, быстро, аккуратно!
мне это нравится, потому что вам не нужно добавлять никаких зависимостей к вашему проекту вообще, и все это остается очень быстрым.
bundle execнемного замедляет работу, что вам нужно сделать, чтобы убедиться, что вы используете одну и ту же версию rspec все время. Что 0.56 секунд потребовалось, чтобы запустить два теста составила 99% взяты на время, которое потребовалось, мой компьютер, чтобы загрузить вас. Запуск сотен спецификаций должен быть очень быстрым. Единственная проблема, с которой вы можете столкнуться, я знаю, что если вы измените версии rspec, и новая версия не будет обратно совместима с некоторой функцией, которую вы использовали в своем тесте, вам, возможно, придется переписать некоторые тесты.это хорошо, если вы делаете одноразовые спецификации или имеете веские причины не включать rspec в свой gemspec, однако это не очень хорошо для обеспечения совместного использования или обеспечения совместимости.
Comments