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?
Ответы
Ответ 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 в вашем каталоге спецификаций.
* Я еще не пробовал...