Я планирую создать плагин, который будет генерировать код приложения на основе сценариев 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, а затем сгенерировать код на основе того, что есть в этих сценариях. Это позволит вам одновременно создавать тесты и писать код. И вам не нужно будет вводить все поля для командной строки генератора шаблонов, и он автоматически установит ассоциации и создаст соответствующие типы полей в представлении. Кроме того, это позволит вам сохранить весь дизайн функции в одном файле. Используя этот подход, вы должны сначала запустить генератор в сценарии, а затем запустить тесты огурца после генерации. Если бы он был настроен правильно, все прошло бы с первого раза, и у вас был бы довольно прочный прототип, который можно было бы настроить.
Есть ли какие-нибудь плагины, похожие на эту комбинацию тестирования и генерации?
И спасибо, если вы нашли время, чтобы прочитать это ... Я знаю, это было немного долго.