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

Testing Rails 3.1 монтируемый двигатель с Rspec

Я начал создавать движок Rails 3.1, и мне сложно провести его тестирование с помощью rspec.

Прежде всего, если я запустил rails g integration_test whatever, он создает регулярный интегральный тест в тестах/интеграции вместо spec/запросов (rspec-rails gem устанавливается и требуется как зависимость от разработки в файле gemspec)

Кроме того, когда я запускаю spec-тест, я получаю сообщение об ошибке, когда таблица, соответствующая тестируемой модели, не была создана. Я попробовал rake engine_name:install:migrations и запустил rake db:migrate из фиктивного приложения, и я получил ошибку "table already exists".

Все просто кажется отключенным, я чувствую, что здесь что-то не хватает, чтобы заставить rspec gem работать без сбоев, как это обычно бывает с приложениями с полными рельсами.

Я следил за всеми изменениями здесь http://rubyx.com/2011/03/01/start-your-engines, и я могу проверить двигатель вручную, запустив фиктивное приложение через консоль, как показано здесь. http://railscasts.com/episodes/277-mountable-engines.

Есть ли способ сделать rspec значением по умолчанию для тестирования движка rails 3.1?

4b9b3361

Ответ 1

Я использую RSpec с движком Rails без проблем.

Я создал свой плагин, используя следующие переключатели: -T --full --dummy-path = spec/dummy.

  • -T исключает тест/блок
  • --full указывает, что плагин является двигателем
  • --dummy-path просто так, что мы не получаем тестовый каталог ( по умолчанию это test/dummy).

Оттуда я использовал spec_helper из статьи "Запустите свои двигатели":

# Configure Rails Envinronment
ENV["RAILS_ENV"] = "test"
require File.expand_path("../dummy/config/environment.rb",  __FILE__)

require 'rspec/rails'

ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../')

# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f }

RSpec.configure do |config|
  config.use_transactional_fixtures = true
end

Для генераторов. Я добавляю блок config.generators в свой файл engine.rb следующим образом:

module MyEngine
  class Engine < Rails::Engine
    config.generators do |g|
      g.test_framework :rspec, :view_specs => false
    end
  end
end

С этим я могу получить тесты rspec при запуске генератора, такого как генератор модели.

Что касается БД, правильно ли установлен ваш файл database.yml? Загрузили тестовую среду, например. rake db:test:clone или rake db:migrate RAILS_ENV=test? Я предполагаю, что RSpec не может видеть ваши таблицы, потому что нет тестовой базы данных.

Ответ 2

Я искал тот же ответ, и я нашел драгоценный камень горения, который обещает установить полную среду для спецификации вашего двигателя в более простой способ. Просто добавьте

gem.add_development_dependency 'combustion', '~> 0.3.1'

в ваш gemspec и запустите

bundle exec combust

чтобы воспроизвести полное приложение rails в вашем каталоге спецификаций.

* Я еще не пробовал...