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

Как протестировать Rails 3 с огурцом и Rspec?

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

  • Добавьте приложение проверки rails к корню gem (myengine), запустив: rails new /myengine/rails_app

  • Добавьте Cucumber в /myengine/rails_app/features, как в обычном приложении Rails

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

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

  • Включите приборы в /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)

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

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

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

4b9b3361

Ответ 1

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

rvm gemset create edge
rvm use @edge

Затем установите рельсы:

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

Оттуда вы можете следить за Piotr Sarnacki mountable app tutorial, заменяя такие вызовы, как:

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

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

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

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

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

Огурцы. Они находятся в netzke-core/features. В env.rb у меня есть:

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

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

функции. Они находятся в netzke-core/spec. В spec_helper.rb у меня есть следующее:

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

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

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

cucumber features

и

rspec spec

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

Ответ 3

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

  • Создание плагина rails в 3.2:

    rails plugin new blog --mountable --full
    

    Это создает test/dummy, содержащий приложение dummy rails

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

  • Переместите папку-заглушку в spec (и, возможно, избавитесь от других тестовых файлов)

  • Адаптировать specs/spec_helper.rb, чтобы он включал

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

    вместо

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

  • Добавить

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

    до

    require 'cucumber/rails'
    

    in features/support/env.rb

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