Я планирую создать плагин, который будет генерировать код приложения на основе сценариев Cucumber, но я хочу быть уверен, что не изобретаю велосипед здесь заново. Кто-нибудь знает о плагине, который работает с Cucumber и генерирует модели, контроллеры и представления?
Небольшая справка о том, что я пытаюсь сделать, на случай, если это не имеет смысла. Когда я создаю новое приложение, вот мой рабочий процесс:
Набросайте на моей доске 2 типа высокоуровневых дизайнов. 1 показывает модели и взаимосвязи, а другой показывает примитивные экраны для макетов, форм и т. Д.
Напишите сценарии огурца, основанные на проекте высокого уровня (но более мелкомасштабном). Многие из этих шагов просто описывают то, что я увижу в конкретном представлении, а также обрисовывают поток приложения. Я считаю, что создание всех сценариев, которые я могу придумать, до того, как я начну кодировать, лучше, чем делать по одному и кодировать после написания каждого сценария.
Я запускаю сценарии с огурцом, смотрю на первый сбой и начинаю кодирование оттуда. Обычно перед этим шагом у меня есть дополнительная настройка, чтобы настроить мое приложение Rails в соответствии с моими предпочтениями и включить драгоценные камни, которые я знаю, что буду использовать. Я также нахожу логический порядок запуска моих файлов функций, поскольку некоторые из них зависят от других. Очевидно, начиная с таких вещей, как аутентификация.
Затем я использую генераторы Rails (скаффолд или просто модель), чтобы помочь мне создать код, необходимый для прохождения сценария. Я изменяю некоторые шаблоны генератора, чтобы получить то, что я хочу.
Затем я настраиваю сгенерированный код, если необходимо. В большинстве случаев это связано с установлением отношений в модели, работа с ассоциациями в представлениях и любые другие нестандартные функции, которые не могут предоставить скаффолдинг.
Я запускаю свои миграции, если необходимо
Затем я повторно запускаю свои сценарии и повторяю все шаги с 4-6 до тех пор, пока сценарий
Повторяйте шаги 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 и последующая генерация кода на основе того, что есть в этих сценариях, сэкономили бы время. Это позволит вам одновременно создавать тесты и писать код. И вам не нужно вводить все поля для командной строки генератора скаффолда, и он автоматически установит ассоциации и создаст соответствующие типы полей в представлении. Кроме того, это позволит вам сохранить весь дизайн функции в одном файле. Используя этот подход, вы должны сначала запустить генератор в сценарии, а затем запустить тесты огурца после генерации. Если бы он был настроен правильно, все прошло бы с первого раза, и у вас был бы довольно прочный прототип, который можно было бы настроить.
Существуют ли плагины, похожие на такое тестирование? комбо поколения?
И спасибо, если вы нашли время прочитать это ... Я знаю, что это было немного длинновато.