我计划创建一个插件,它将生成基于Cucumber场景的应用程序代码,但我想确保我不会在这里重新发明轮子。是否有人知道与Cucumber一起工作并生成模型、控制器和视图的插件?
只是关于我试图做的事情的一些背景,以防这没有意义。当我创建一个新的应用程序时,这里是我的工作流:
,
我可能错了,但我认为很多人可能使用类似的方法。让我烦恼的是,我看到在编写场景和生成/调整代码之间有很多重复。我希望能够用我的黄瓜场景生成我的应用程序的skelaton,并使用步骤定义来帮助我定制生成的内容。下面是一个示例:
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现在这只是psuedo,但我认为在Cucumber场景中定义应用程序并根据这些场景中的内容生成代码是一个实时节省器。这将允许您同时创建测试和编写代码。并且您不必键入支架生成器命令行的所有字段,它将自动设置关联并在视图中创建正确的字段类型。此外,它还允许您将整个功能设计保存在一个文件中。使用这种方法,您将首先在场景中运行生成器,然后在生成之后运行黄瓜测试。如果设置正确,一切都将通过第一次,您将有一个非常坚实的原型,您可以定制。
有类似于这种测试和生成组合的插件吗?
谢谢你花时间读这篇文章..。我知道有点长。
发布于 2012-11-22 21:31:59
几天前我也有同样的想法。然而,经过更多的思考之后,我放弃了从特征文件生成模型的想法。相反,我使用的是一个dsl,它使用来自dsl的rails生成器生成模型/脚手架/资源。
在我完成这项工作之后,我就开始考虑连接到生成器中来创建基于dsl的特性文件。
我有一个尖峰运行,它需要以下输入:
application :test do
  model :survey do
    attribute :name, :string
    has_many :questions
  end
  model :question do
    has_many :options
    has_many :answers
    belongs_to :survey
    attribute :body, :string
  end
  model :option do
    belongs_to :question
    attribute :body, :string
    attribute :selector, :string
  end
  model :result do
    belongs_to :survey
    has_many :answers
  end
  model :answer do
    belongs_to :result
    belongs_to :question
    attribute :value, :string
  end
  gen
end并打印以下输出:
rails new test
cd test
rails generate model survey name:string 
rails generate model question survey_id:integer body:string 
rails generate model option question_id:integer body:string selector:string 
rails generate model result survey_id:integer 
rails generate model answer result_id:integer question_id:integer value:string 
Updating class: Survey
  has_many:questions
Updating class: Question
  belongs_to:survey
  has_many:options
  has_many:answers
Updating class: Option
  belongs_to:question
Updating class: Result
  belongs_to:survey
  has_many:answers
Updating class: Answer
  belongs_to:result
  belongs_to:question史蒂夫
https://stackoverflow.com/questions/4433347
复制相似问题