Rails 3.1 плагин Gem, фиктивное тестовое приложение, rspec
Итак, Rails 3.1 поставляется с малоизвестным удобным генератором "rails g plugin new", который дает вам скелет, подходящий для плагина gails gem. [Http://guides.rubyonrails.org/plugins.html#or-generate-a-gemified-plugin]
Одна из полезных вещей, которые это делает, - это удобно настроить для тестирования с помощью Test:: Unit. Это дает вам базовое фиктивное приложение Rails, которое ваши тесты могут выполнять в контексте, для проверки поведения "engine", которое работает только в копии приложения Rails. (он помещает его. /test/dummy ). Но ваши тесты все еще находятся в my_gem/test, тесты не живут в фиктивном приложении. И там есть my_gem/test/test_helper.rb, написанный так, что тесты будут выполняться в контексте фиктивного приложения, загруженного в.. /dummy/config/environment.
Я описываю это, потому что я думаю, что многие люди не знают об этом новом генераторе, который так хорошо складывается.
Но мой вопрос: кто-нибудь понял, как это сделать с помощью rspec? Я попытался следовать тем же принципам DIY, чтобы настроить такие вещи для rspec в gim-плагине rails, но я сталкиваюсь с различными запутанными блокпостами, и надеюсь, что кто-то еще это выяснил (или был бы заинтересован в том, чтобы понять это для остальных из нас, хех).
Ответы
Ответ 1
Создайте плагин без тестового блока и укажите путь для фиктивного приложения:
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 из корня вашего плагина, и он также получит спецификации из фиктивного приложения.
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
Ответ 2
Просто запустите 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
!