Estoy planeando crear un complemento que genere código de aplicación basado en escenarios de pepino, pero quiero asegurarme de que no estoy reinventando la rueda aquí. ¿Alguien conoce un plugin que funciona con Cucumber y genera modelos, controladores y vistas?¿Hay algún complemento de Rails que pueda generar modelos, vistas, etc. utilizando los escenarios de Cucumber?
Solo un poco de información sobre lo que estoy tratando de hacer en caso de que esto no tenga sentido. Cuando creo una nueva aplicación aquí está mi flujo de trabajo:
Dibuje 2 tipos de diseños de alto nivel en mi pizarra. 1 que muestra modelos y relaciones y otro que muestra algunas pantallas primitivas para diseños, formularios, etc.
Escribe escenarios de pepino basados en el diseño de alto nivel (pero más fino). Muchos de estos pasos solo describen lo que veré en una vista particular y también describen el flujo de la aplicación. Encuentro que crear todos los escenarios en los que puedo pensar antes de comenzar a codificar es mejor que hacer uno a la vez y codificar después de escribir cada escenario.
Ejecuto los escenarios de pepino y miro la primera falla y comienzo la codificación desde allí. Normalmente tengo una configuración adicional antes de este paso para configurar mi aplicación Rails según mis preferencias e incluir gemas que sé que usaré. También encuentro un orden lógico para ejecutar mis archivos de funciones, ya que algunos dependen de otros. Obviamente, comienza con cosas como la autenticación.
Luego uso los generadores de Rails (andamio o solo modelo) para ayudarme a crear el código que necesito para aprobar un escenario. Modifico algunas de las plantillas de generador para darme lo que quiero.
Luego modifico el código generado si es necesario. La mayoría de las veces esto implica establecer relaciones en el modelo, trabajar con las asociaciones en las vistas y cualquier otra funcionalidad no estándar que los andamios no puedan proporcionar.
dirigir mi migraciones si es necesario
Entonces vuelva a ejecutar mis escenarios y repetir las medidas en 4-6 hasta que pase el escenario.
Repita los pasos 4 a 7 hasta que pasen todos los escenarios.
Puedo estar equivocado, pero creo que muchas personas probablemente usan un enfoque similar a este. Lo que me molesta es que veo mucha duplicación entre escribir los escenarios y generar/ajustar el código. Quiero poder generar el esqueleto de mi aplicación con mis escenarios de pepino y usar las definiciones de pasos para ayudarme a personalizar lo que se genera. He aquí un ejemplo:
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
esto generaría código de este modo:
#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
esto es sólo pseudo en este punto, pero creo que sería un gran ahorro de tiempo para definir su aplicación en Escenarios de pepino y luego generar el código en función de lo que está en estos escenarios. Esto le permitiría crear pruebas y escribir código al mismo tiempo. Y no tendrías que escribir todos los campos para la línea de comando del generador de andamios, y establecería automáticamente las asociaciones y crearía los tipos de campos apropiados en la vista. Además, le permitirá mantener todo su diseño de características en un solo archivo.Usando este enfoque, primero ejecutaría el generador en el escenario y luego ejecutaría las pruebas de pepino después de la generación. Si se configuró correctamente, todo pasaría la primera vez y tendrías un prototipo bastante sólido que podrías personalizar.
¿Hay algún complemento que se asemeje a este tipo de pruebas & generación combinada?
Y gracias si se tomaron el tiempo para leer esto ... Sé que fue un poco largo.
creo que esto absolutamente una idea interesante, me recon se Sería un trabajo para Ragel – scaney
¡Guau, esta es una idea genial! No he escuchado nada que haga esto. Si continúas con tu plan, estaría muy interesado en utilizar este complemento y quizás también contribuir. Espero que hagas un blog extenso sobre esto y tal vez incluso haga ping a Ryan Bates para que pueda hacer un Railscast al respecto, garantizando así la exposición al grueso de la comunidad de Rails. – Samo
@Samo - Estoy trabajando en un prototipo simple en este momento, tratando de descubrir los pormenores ... y probablemente voy a escribir sobre él en la próxima semana o 2. Te enviaré un enlace al repositorio de github después de Puse un poco de trabajo y veo si es algo con lo que quieres ayudar. ¡Gracias! – johnmcaliley