2010-12-07 3 views
19

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

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

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

  3. Требовать Rails Engine Gem (с использованием :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) 

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

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

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

ответ

6

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

rvm gemset create edge 
rvm use @edge 

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

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

Оттуда вы можете следовать Piotr Sarnacki's 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 в проект, а затем возиться с ним до тех пор, пока он не будет работать. Я сделал это один раз, прежде чем я знаю, что это возможно, но я не могу найти код прямо сейчас.

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

+0

Ryan, спасибо за информацию. Это то, что я искал. Похоже, некоторые улучшения улучшаются в 3.1. Тем не менее, проблема с установкой края рельсов. «ОШИБКА: Не удалось найти действительный драгоценный камень« pkg/rails-3.1.0.beta.gem »(> = 0) в любом репозитории« Все другие драгоценные камни (AR, AS и т. Д.) Строят и устанавливают отлично, но это не похоже на то, что Rakefile строит рельсы. Может быть, что-то с моей средой ... Я только начал поиск и устранение неполадок, но если у вас есть минута, сообщите мне, если вы можете установить край из задачи рейка без ошибок. Спасибо чувак! – johnmcaliley 2011-01-22 15:15:56

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

0

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

  1. Генерирование рельсы плагин в 3.2:

    rails plugin new blog --mountable --full 
    

    Это создает test/dummy, содержащее фиктивные рельсы приложение

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

  3. Переместить фиктивную папку spec (и, возможно, избавиться от других testfiles)

  4. Adapt 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 a.o.

  6. Добавить

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

    перед тем

    require 'cucumber/rails' 
    

    в features/support/env.rb

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

Смежные вопросы