Подтвердить что ты не робот

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, но я сталкиваюсь с различными запутанными блокпостами, и надеюсь, что кто-то еще это выяснил (или был бы заинтересован в том, чтобы понять это для остальных из нас, хех).

4b9b3361

Ответ 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!