Существуют ли какие-либо плагины Rails, которые могут генерировать модели, представления и т. д. с использованием сценариев Cucumber?

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

Небольшая справка о том, что я пытаюсь сделать, на случай, если это не имеет смысла. Когда я создаю новое приложение, вот мой рабочий процесс:

  1. Набросайте на моей доске 2 типа высокоуровневых дизайнов. 1 показывает модели и взаимосвязи, а другой показывает примитивные экраны для макетов, форм и т. Д.

  2. Напишите сценарии огурца, основанные на проекте высокого уровня (но более мелкомасштабном). Многие из этих шагов просто описывают то, что я увижу в конкретном представлении, а также обрисовывают поток приложения. Я считаю, что создание всех сценариев, которые я могу придумать, до того, как я начну кодировать, лучше, чем делать по одному и кодировать после написания каждого сценария.

  3. Я запускаю сценарии с огурцом, смотрю на первый сбой и начинаю кодирование оттуда. Обычно перед этим шагом у меня есть дополнительная настройка, чтобы настроить мое приложение Rails в соответствии с моими предпочтениями и включить драгоценные камни, которые я знаю, что буду использовать. Я также нахожу логический порядок запуска моих файлов функций, поскольку некоторые из них зависят от других. Очевидно, начиная с таких вещей, как аутентификация.

  4. Затем я использую генераторы Rails (скаффолд или просто модель), чтобы помочь мне создать код, необходимый для прохождения сценария. Я изменяю некоторые шаблоны генератора, чтобы получить то, что я хочу.

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

  6. Я запускаю свои миграции, если необходимо

  7. Затем я повторно запускаю свои сценарии и повторяю все шаги с 4-6 до тех пор, пока сценарий

  8. Повторяйте шаги 4-7, пока не пройдут все сценарии.

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

Scenario: MODEL widget exists
  Given a widget model exists
  Then it should belong to a "manufacturer"
  And it should have a "quantity:integer" field
  And it should validate the presence of "quantity"
  And it should have many "wadgets"
  And it should accept nested attributes for "wadgets"
  #etc...

Scenario: VIEW new widget page
  Given I am on the new widgets page
  Then I should see a "quantity" field
  And I should see a "wadgets:name" nested field
  And I should see a button with text "Save Widget"

Scenario: CONTROLLER widget is created
  Given a new widget is created
  Then I should be on the widgets page

Это сгенерирует такой код:

#FROM SCENARIO 1
class Widget < ActiveRecord::Base
  has_many :wadgets
  belongs_to :manufacturer
  validates_presence_of :quantity
  accepts_nested_attributes_for :wadgets
end

#FROM SCENARIO 1      
class CreateWidget < ActiveRecord::Migration
  def self.up
    create_table :widgets do |t|
      t.integer :quantity, :null=>false
      t.integer :manufacturer_id

      t.timestamps
    end
  end

  def self.down
    drop_table :widgets
  end
end

#FROM SCENARIO 2
#new.html.haml (using formtastic helpers)
=semantic_form_for(@widget) do |f|
  = f.inputs do
    = f.input :quantity
    = f.semantic_fields_for :wadgets do |wadget|
      = location.input :name
  = f.buttons 
    =f.commit_button "Save Widget"

#FROM SCENARIO 3 (using inherited resources)
class WidgetsController < InheritedResources::Base
  def create
    create!{ widget_urls }
  end
end

На данный момент это просто псевдоним, но я думаю, что определение вашего приложения в сценариях Cucumber и последующая генерация кода на основе того, что есть в этих сценариях, сэкономили бы время. Это позволит вам одновременно создавать тесты и писать код. И вам не нужно вводить все поля для командной строки генератора скаффолда, и он автоматически установит ассоциации и создаст соответствующие типы полей в представлении. Кроме того, это позволит вам сохранить весь дизайн функции в одном файле. Используя этот подход, вы должны сначала запустить генератор в сценарии, а затем запустить тесты огурца после генерации. Если бы он был настроен правильно, все прошло бы с первого раза, и у вас был бы довольно прочный прототип, который можно было бы настроить.

Существуют ли плагины, похожие на такое тестирование? комбо поколения?

И спасибо, если вы нашли время прочитать это ... Я знаю, что это было немного длинновато.

7
задан johnmcaliley 13 December 2010 в 20:47
поделиться