Как протестировать Rails 3 Engine с Cucumber & Rspec? - PullRequest
19 голосов
/ 07 декабря 2010

Я прошу прощения, если этот вопрос немного субъективен ... Я пытаюсь найти лучший способ протестировать Rails 3 Engine с Cucumber & Rspec. Для проверки двигателя необходимо приложение rails 3. Вот что я сейчас делаю:

  1. Добавьте приложение для тестирования рельсов в корень гема (myengine), запустив: rails new /myengine/rails_app

  2. Добавить огурец к /myengine/rails_app/features, как в обычном приложении Rails

  3. Требуется самоцвет Rails Engine (используется :path=>"/myengine") в /myengine/rails_app/Gemfile

  4. Добавить спецификацию в корневой каталог гема: /myengine/spec

  5. Включите приборы в /myengine/spec/fixtures, и я добавляю следующее в мой cuc env.rb:

env.rb:

Fixtures.reset_cache
fixtures_folder = File.join(Rails.root, 'spec', 'fixtures')  
fixtures = Dir[File.join(fixtures_folder, '*.yml')].map {|f| File.basename(f, '.yml') }  
Fixtures.create_fixtures(fixtures_folder, fixtures)

Видите ли вы какие-либо проблемы с его настройкой? Тесты проходят нормально, но я не решаюсь добавить функции в приложение для тестовых шин. Первоначально я попытался поместить функции в корень гема и создал приложение rails внутри features/support, но по какой-то причине мой двигатель не инициализировался при запуске тестов, хотя я мог видеть, что приложение загружает все остальное, Кук побежал.

Если кто-то работает с Rails Engines и использует cuc и rspec для тестирования, мне было бы интересно узнать ваши настройки.

** UPDATE
Я немного изменил настройки, так как написал этот вопрос. Я решил избавиться от директории spec под корнем движка. Теперь я просто создаю приложение rails с именем «test_app» и настраиваю cuc и rspec внутри этого приложения, как я обычно делаю в приложении rails. Затем я включаю драгоценный камень, как я сделал на шаге 3 выше. Поскольку движок является вспомогательным приложением, я думаю, что лучше всего протестировать его, как будто это было обычное приложение rails. Мне все еще интересно услышать, есть ли у кого-то другая установка.

Ответы [ 3 ]

6 голосов
/ 22 января 2011

Rails 3.1 (будет) генерировать довольно хорошие леса для двигателей. Я бы рекомендовал использовать RVM для создания нового набора гемов с именем edge и переключения на него:

rvm gemset create edge
rvm use @edge

Затем установите боковые направляющие:

git clone git://github.com/rails/rails.git
cd rails
rake install

Оттуда вы можете следовать Руководству по монтированию приложения Петра Сарнаки , заменяя такие вызовы, как:

bundle exec ./bin/rails plugin new ../blog --edge --mountable

С просто:

rails plugin new blog --mountable --full

Возможность монтирования делает приложение монтируемым, в то время как полная опция делает его движком с уже встроенными тестами. Чтобы протестировать движок, этот генератор создает папку в test с именем dummy, которая содержит небольшое приложение Rails. Вы можете увидеть, как это загружается в test/test_helper.rb.

Тогда вам нужно помассировать данные, чтобы сделать то, что им нужно для работы. Я бы порекомендовал скопировать в проект файлы огурца из стандартного rails g cucumber:install, а затем возиться с ним, пока он не заработает. Я делал это раньше, поэтому знаю, что это возможно, но сейчас не могу найти код.

Дайте мне знать, как вы идете.

2 голосов
/ 22 января 2011

Я объясню, как я это сделал, используя в качестве примера следующий гем: https://github.com/skozlov/netzke-core

Приложение для тестирования .Это в netzke-core/test/rails_app.Это приложение может быть запущено независимо, поэтому я также могу использовать его для ручного тестирования или для игры с новыми функциями, если мне нравится.

Для того, чтобы приложение для тестирования могло загрузить сам гем, у меня есть следующее вapplication.rb:

$:.unshift File.expand_path('../../../../lib', __FILE__)
require 'netzke-core'

Особенности огурца .Они в netzke-core/featuresenv.rb у меня есть:

require File.expand_path(File.dirname(__FILE__) + '/../../test/rails_app/config/environment')

..., который загружает приложение тестирования перед выполнением функций.

Спецификации .Это в netzke-core/specspec_helper.rb у меня есть следующее:

require File.expand_path("../../test/rails_app/config/environment", __FILE__)

... которое будет загружать приложение тестирования перед запуском спецификаций.

Запуск тестов .Эта настройка позволяет мне запускать тесты из корня гема:

cucumber features

и

rspec spec

Factory Girl .Не для этого конкретного драгоценного камня, но я обычно использую factory_girl вместо светильников (см., Например, аналогичную настройку в https://github.com/skozlov/netzke-basepack).

0 голосов
/ 07 января 2014

Немного опоздал на вечеринку, но вот моя стратегия:

  1. Создание плагина рельсов в 3.2:

    rails plugin new blog --mountable --full
    

    Это создает test/dummy, содержащее приложение-заглушку

  2. Добавить спецификации к spec

  3. Переместите фиктивную папку в spec (и при необходимости избавьтесь от других тестовых файлов)

  4. Адаптируйте specs/spec_helper.rb, чтобы оно включало

    require File.expand_path("../.../config/environment", __FILE__)
    

    вместо

    require File.expand_path("../dummy/config/environment", __FILE__)
    
  5. Выполнить rails g cucumber:install. Будет сгенерирована папка features.

  6. Добавить

    ENV["RAILS_ROOT"] ||= File.expand_path(File.dirname(__FILE__) + '/../../spec/dummy')
    

    до

    require 'cucumber/rails'
    

    в features/support/env.rb

Теперь у вас есть features и spec в корневом каталоге вашего проекта, в то время как приложение-заглушка аккуратно спрятано под spec/dummy

...