Rails 3.1 plugin gem, тестовое приложение-заглушка - PullRequest
40 голосов
/ 14 декабря 2011

Итак, Rails 3.1 поставляется с малоизвестным удобным генератором "rails g plugin new", который дает вам скелет, подходящий для плагина rails gem. [http://guides.rubyonrails.org/plugins.html#or-generate-a-gemified-plugin]

Одна из полезных функций - удобная настройка для тестирования с помощью Test :: Unit. Это дает вам простое фиктивное приложение Rails, которое ваши тесты могут запускать в контексте, для тестирования поведения «движка», которое функционирует только в копии приложения Rails. (это помещает это в ./test/dummy). Но ваши тесты все еще находятся в my_gem / test, тесты не живут в фиктивном приложении. И my_gem / test / test_helper.rb написан так, что тесты будут выполняться в контексте фиктивного приложения, загруженного по адресу ../dummy/config/environment.

Я описываю это, потому что я думаю, что многие люди не знают об этом новом генераторе, который так хорошо все настраивает.

Но мой вопрос: кто-нибудь придумал, как сделать это с помощью rspec? Я пытался следовать тем же принципам «Сделай сам», чтобы настроить подобные вещи для rspec в жемчужине плагина rails, но я сталкиваюсь с различными путающими препятствиями, и я надеюсь, что, возможно, кто-то уже понял это (или хотел бы выяснить это) для остальных из нас, хе).

Ответы [ 2 ]

93 голосов
/ 15 февраля 2012

Создайте плагин без test-unit и укажите путь для фиктивного приложения:

rails plugin new foobar --skip-test-unit --dummy-path=spec/dummy

Добавьте rspec-rails как зависимость разработки к файлу gemspec (foobar.gemspec):

Gem::Specification.new do |s|
  .
  .
  .
  s.add_development_dependency "rspec-rails"
end

Выполнить bundle install

Создайте символическую ссылку из фиктивного приложения в каталог спецификации плагина и запустите генератор установки Rspec:

cd spec/dummy
ln -s ../../spec
rails generate rspec:install
cd -

Теперь отредактируйте spec/spec_helper.rb (илиspec/rails_helper.rb в rails 4+, не уверен в старых версиях) изменив эту строку (строка 3):

require File.expand_path("../../config/environment", __FILE__)

На это:

require File.expand_path("../dummy/config/environment", __FILE__)

Теперь вы можете запустить Rspec изroot вашего плагина, и он также будет получать спецификации из фиктивного приложения.

bundle exec rspec spec

Я написал об этом более подробно, показывая, как также настроить capybara, spork и guard в плагине rails сфиктивная заявка:

https://web.archive.org/web/20130125091106/http://namick.tumblr.com/post/17663752365/how-to-create-a-gemified-plugin-with-rails-3-2-rspec

21 голосов
/ 31 января 2012

Просто запустите rails plugin new <gemname>, а затем добавьте rspec как development_dependency в файл gemspec и установите его rspec --init.

Теперь переместите фиктивную подпапку из test в spec и добавьте их в spec_helper:

ENV["RAILS_ENV"] = "test"

require File.expand_path("../dummy/config/environment.rb",  __FILE__)
require "rails/test_help"
require '<gemname>'

Rails.backtrace_cleaner.remove_silencers!

как они есть в test_helper!

...