ruby-on-rails – 是否有任何可以使用Cucumber场景生成模型,视图等的Rails插件?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 是否有任何可以使用Cucumber场景生成模型,视图等的Rails插件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我打算创建一个基于Cucumber场景生成应用程序代码插件,但我想确保我不是在这里重新发明轮子.有人知道一个与Cucumber一起使用并生成模型,控制器和视图的插件吗?

关于我想要做的事情的一点背景,如果这没有意义.当我在这里创建新应用程序时,我的工作流程是:

>在我的白板上绘制出两种类型的高级设计. 1显示模型和关系,另一个显示布局,表单等的原始屏幕.
>根据高级设计编写黄瓜场景(但更细粒度).其中许多步骤仅描述了我将在特定视图中看到的内容,并概述了应用程序的流程.我发现在开始编码之前创建我能想到的所有场景比在编写每个场景之后一次执行一个并编码更好.
>我运行黄瓜场景并查看第一次失败并从那里开始编码.在此步骤之前,我通常会进行一些额外的设置,以便根据我的偏好配置我的Rails应用程序,并包含我知道我将使用的宝石.我还找到了运行我的功能文件的逻辑顺序,因为有些文件依赖于其他文件.显然从身份验证开始.
>然后我使用Rails生成器(脚手架或只是模型)来帮助我创建传递场景所需的代码.我改变了一些生成器模板,给了我想要的东西.
>然后我根据需要调整生成代码.大多数情况下,这涉及在模型中设置关系,使用视图中的关联以及脚手架无法提供的任何其他非标准功能.
>如有必要,我会运行迁移
>然后我重新运行我的场景并重复4-6中的任何步骤,直到场景通过.
>重复步骤4-7,直到所有方案都通过.

我可能错了,但我认为很多人可能会使用类似的方法.让我烦恼的是,我在编写场景和生成/调整代码之间看到了很多重复.我希望能够使用我的黄瓜场景生成我的应用程序的skelaton,并使用步骤定义来帮助我自定义生成内容.这是一个例子:

  1. Scenario: MODEL widget exists
  2. Given a widget model exists
  3. Then it should belong to a "manufacturer"
  4. And it should have a "quantity:integer" field
  5. And it should validate the presence of "quantity"
  6. And it should have many "wadgets"
  7. And it should accept nested attributes for "wadgets"
  8. #etc...
  9.  
  10. Scenario: VIEW new widget page
  11. Given I am on the new widgets page
  12. Then I should see a "quantity" field
  13. And I should see a "wadgets:name" nested field
  14. And I should see a button with text "Save Widget"
  15.  
  16. Scenario: CONTROLLER widget is created
  17. Given a new widget is created
  18. Then I should be on the widgets page

这将生成如下代码

  1. #FROM SCENARIO 1
  2. class Widget < ActiveRecord::Base
  3. has_many :wadgets
  4. belongs_to :manufacturer
  5. validates_presence_of :quantity
  6. accepts_nested_attributes_for :wadgets
  7. end
  8.  
  9. #FROM SCENARIO 1
  10. class CreateWidget < ActiveRecord::Migration
  11. def self.up
  12. create_table :widgets do |t|
  13. t.integer :quantity,:null=>false
  14. t.integer :manufacturer_id
  15.  
  16. t.timestamps
  17. end
  18. end
  19.  
  20. def self.down
  21. drop_table :widgets
  22. end
  23. end
  24.  
  25. #FROM SCENARIO 2
  26. #new.html.haml (using formtastic helpers)
  27. =semantic_form_for(@widget) do |f|
  28. = f.inputs do
  29. = f.input :quantity
  30. = f.semantic_fields_for :wadgets do |wadget|
  31. = location.input :name
  32. = f.buttons
  33. =f.commit_button "Save Widget"
  34.  
  35. #FROM SCENARIO 3 (using inherited resources)
  36. class WidgetsController < InheritedResources::Base
  37. def create
  38. create!{ widget_urls }
  39. end
  40. end

这只是伪装,但我认为在Cucumber场景中定义应用程序然后根据这些场景中的内容生成代码将是一个真正的节省时间.这将允许您同时创建测试和编写代码.并且您不必键入scaffold生成器命令行的所有字段,它将自动设置关联并在视图中创建正确的字段类型.此外,它还允许您将整个功能设计保存在一个文件中.使用此方法,您将首先在场景中运行生成器,然后在生成后运行黄瓜测试.如果它设置正确,一切都会在第一次通过,你会有一个非常可靠的原型,你可以自定义.

有没有类似这种测试和插件插件?一代组合?

谢谢你花时间阅读这篇文章..我知道它有点长.

解决方法

几天前我有同样的想法.然而,在考虑了一些之后,我放弃了从特征文件生成模型的想法.相反,我正在使用dsl,它使用dsl中的rails生成生成模型/脚手架/资源.

在我开始工作之后,我正在考虑在生成器中挂钩以基于dsl创建功能文件.

我有一个spike运行,需要以下输入:

  1. application :test do
  2. model :survey do
  3. attribute :name,:string
  4. has_many :questions
  5. end
  6. model :question do
  7. has_many :options
  8. has_many :answers
  9. belongs_to :survey
  10. attribute :body,:string
  11. end
  12. model :option do
  13. belongs_to :question
  14. attribute :body,:string
  15. attribute :selector,:string
  16.  
  17. end
  18. model :result do
  19. belongs_to :survey
  20. has_many :answers
  21. end
  22. model :answer do
  23. belongs_to :result
  24. belongs_to :question
  25. attribute :value,:string
  26. end
  27. gen
  28. end

并打印以下输出

  1. rails new test
  2. cd test
  3. rails generate model survey name:string
  4. rails generate model question survey_id:integer body:string
  5. rails generate model option question_id:integer body:string selector:string
  6. rails generate model result survey_id:integer
  7. rails generate model answer result_id:integer question_id:integer value:string
  8. Updating class: Survey
  9. has_many:questions
  10. Updating class: Question
  11. belongs_to:survey
  12. has_many:options
  13. has_many:answers
  14. Updating class: Option
  15. belongs_to:question
  16. Updating class: Result
  17. belongs_to:survey
  18. has_many:answers
  19. Updating class: Answer
  20. belongs_to:result
  21. belongs_to:question

史蒂夫

猜你在找的Ruby相关文章