Настройка RSpec для тестирования драгоценного камня (не рельсы)



Это довольно легко с добавленным генератором rspec-rails для настройки RSpec для тестирования приложения Rails. Но как насчет добавления RSpec для тестирования драгоценного камня в разработке?
Я не использую ювелира или такие инструменты. Я просто использовал упаковщик (bundle gem my_gem) для настройки структуры для нового драгоценного камня и редактирования *.gemspec вручную.
Я также добавил s.add_development_dependency "rspec", ">= 2.0.0" к gemspec и сделал bundle install.



есть ли хороший учебник, что делать дальше, чтобы заставить RSpec работать?

642   4  

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

    Ничего не найдено.