Сборка типового коробочного приложения на Rails с поддержкой cucumber features

Автор — Дмитрий Бараксанов, дата — 26.01.2010

cucumberСоздавая любое веб-приложение всегда хочется чтобы оно не требовало особых зависимостей от системы. В случае разработки на rails чаще всего приложение зависит от множества чудесных gems, которые облегчают нам жизнь. Из опыта можно сказать что проблемы начинаются как только на одном сервере устанавливаются несколько приложений, которые требуют одинаковые gems разных версий (особенно если это rails gems).

Итак, если вы хотите иметь «коробочное» rails приложение, вот пошаговая инструкция по созданию такого приложения с поддержкой cucumber features (надеюсь что уже все понимают что разрабатывать без тестов нельзя).

1. Создаем приложение

rails --freeze <app_name>

Естественно, что для того чтобы создать приложение нам нужно иметь все rails gem’s.

2. Ставим cucumber

gem install cucumber

он ставит за собой еще несколько джемов.

Для новых версий cucumber (выше 0.4.5) нужно установить еще cucumber-rails gem:

gem install cucumber-rails

Создаем поддержку cucumber в приложении, для этого переходим в корень приложения и запускаем

script/generate cucumber --webrat

3. Вмораживаем gems в приложение

Для полного счастья пропишем зависимости для factory_girl и memory_test_fix в config/environments/cucumber.rb

config.gem "thoughtbot-factory_girl", :lib => "factory_girl", :source => "http://gems.github.com"

config.gem "lda-memory_test_fix", :lib => "memory_test_fix", :source => "http://gems.github.com"

Теперь вмораживаем все gems в приложение

rake gems:unpack RAILS_ENV=cucumber

rake gems:unpack:dependencies RAILS_ENV=cucumber

rake gems:build RAILS_ENV=cucumber

4. Запускаем cucumber features

Сначала создаем пустую схему базы данных

rake db:migrate

Запускает cucumber features

rake features

Если работает, то у нас почти все получилось и мы близки к финалу.

5. Проверка зависимостей

На всякий случай проверяем что все необходимые gems вморожены

rake gems RAILS_ENV=cucumber

И если у каждого gem написано «F», то все хорошо, если нет, то в config/environments/cucumber.rb добавляем зависимости для cucumber gem и пробуем заново вмораживать gems вместе с зависимостями.

6. Избавляемся от системных gems

Теперь удаляем все установленные gems (мы их специально ставили в домашнюю папку, если там есть что-то нужное тогда с удалением будьте повнимательнее)

rm -rf ~/.gem

И наконец, немного магии, немного подправим vendor/gems/cucumber/bin/cucumber, добавив туда пару строчек

#!/usr/bin/env ruby

RAILS_ENV='cucumber'

require 'config/boot'

И еще раз проверяем что выполняются cucumber features

rake features

Работает? Ура!

Comments (2)

 

  1. Guest says:

    Так трабл получается с языком
    Как вариант прямо в файле сценария указать вверху
    language: ru

    • lda says:

      да, в новом огурце надо указать в feature файле язык. простой способ сделать это -
      find features -type f | xargs sed -i ’1i # language: ru’

Leave a Reply