Тестирование Rails 3.1 монтируемого двигателя с Rspec - PullRequest
37 голосов
/ 17 сентября 2011

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

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

Также, когда я запускаю тест спецификации, я получаю сообщение об ошибке, в котором говорится, что таблица, соответствующая модели, которую я тестирую, не была создана. Я попытался rake engine_name:install:migrations и запустил rake db:migrate изнутри фиктивного приложения, и я получил ошибку «таблица уже существует».

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

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

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

Ответы [ 2 ]

62 голосов
/ 19 сентября 2011

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

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

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

Оттуда я использовал spec_helper из статьи "start your engine":

# 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 не может видеть ваши таблицы, потому что не настроена тестовая база данных.

9 голосов
/ 14 марта 2012

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

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

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

bundle exec combust

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

...