Tôi đang lên kế hoạch tạo plugin sẽ tạo mã ứng dụng dựa trên kịch bản dưa chuột, nhưng tôi muốn đảm bảo rằng tôi không sáng tạo lại bánh xe ở đây. Có ai biết về một plugin hoạt động với Cucumber và tạo ra các mô hình, bộ điều khiển và chế độ xem không?Có bất kỳ plugin Rails nào có thể tạo mô hình, chế độ xem, v.v ... sử dụng các kịch bản Cucumber không?
Chỉ cần một chút thông tin về những gì tôi đang cố gắng làm trong trường hợp điều này không có ý nghĩa. Khi tôi tạo một ứng dụng mới ở đây là quy trình làm việc của tôi:
Phác họa 2 loại thiết kế cấp cao trên bảng trắng của tôi. 1 hiển thị các mô hình và mối quan hệ và mô hình khác hiển thị một số màn hình nguyên thủy cho bố cục, biểu mẫu, v.v.
Viết kịch bản dưa chuột dựa trên thiết kế cấp cao (nhưng mịn hơn). Nhiều bước trong số này chỉ mô tả những gì tôi sẽ thấy trên một chế độ xem cụ thể và cũng phác thảo luồng của ứng dụng. Tôi thấy rằng việc tạo ra tất cả các kịch bản mà tôi có thể nghĩ ra trước khi tôi bắt đầu viết mã là tốt hơn so với thực hiện từng cái một và viết mã sau khi viết từng kịch bản.
Tôi chạy các kịch bản dưa chuột và nhìn vào lỗi đầu tiên và bắt đầu mã hóa từ đó. Tôi thường có một số thiết lập bổ sung trước khi bước này để cấu hình ứng dụng Rails của tôi để sở thích của tôi và bao gồm đá quý mà tôi biết tôi sẽ sử dụng. Tôi cũng tìm thấy một thứ tự hợp lý để chạy các tệp tính năng của mình vì một số tệp phụ thuộc vào các tệp khác. Rõ ràng bắt đầu với những thứ như xác thực.
Sau đó, tôi sử dụng trình tạo Rails (giàn giáo hoặc chỉ mô hình) để giúp tôi tạo mã mà tôi cần để truyền một kịch bản. Tôi thay đổi một số mẫu máy phát để cung cấp cho tôi những gì tôi muốn.
Sau đó, tôi tinh chỉnh mã được tạo nếu cần. Phần lớn thời gian này liên quan đến việc thiết lập các mối quan hệ trong mô hình, làm việc với các liên kết trong khung nhìn và bất kỳ chức năng không chuẩn nào khác mà giàn giáo không thể cung cấp.
tôi chạy di cư của tôi nếu cần thiết
Sau đó, tôi chạy lại kịch bản của tôi và lặp lại bất kỳ bước trong 4-6 cho đến khi kịch bản đi.
Lặp lại các bước 4-7 cho đến khi tất cả các tình huống đều trôi qua.
Tôi có thể sai, nhưng tôi nghĩ rất nhiều người có thể sử dụng cách tiếp cận tương tự như vậy. Điều làm tôi khó chịu là tôi thấy rất nhiều sự trùng lặp giữa việc viết kịch bản và tạo/chỉnh sửa mã. Tôi muốn để có thể tạo ra các skelaton của ứng dụng của tôi với các kịch bản dưa chuột của tôi và sử dụng các định nghĩa bước để giúp tôi tùy chỉnh những gì được tạo ra. Dưới đây là một ví dụ:
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
Điều này sẽ tạo ra mã như vậy:
#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
Đây chỉ là psuedo vào thời điểm này, nhưng tôi nghĩ rằng nó sẽ là một thời gian thực-saver để xác định ứng dụng của bạn trong Các kịch bản dưa chuột và sau đó tạo mã dựa trên những gì trong các kịch bản này. Điều này sẽ cho phép bạn tạo các bài kiểm tra và viết mã cùng một lúc. Và bạn sẽ không phải loại bỏ tất cả các trường cho dòng lệnh của trình tạo giàn giáo, và nó sẽ tự động thiết lập các liên kết và tạo các kiểu trường thích hợp trong khung nhìn. Ngoài ra, nó sẽ cho phép bạn giữ toàn bộ thiết kế tính năng trong một tệp.Sử dụng phương pháp này, bạn sẽ chạy máy phát điện đầu tiên trên kịch bản và sau đó chạy thử nghiệm dưa chuột sau khi tạo. Nếu nó được thiết lập chính xác, mọi thứ sẽ vượt qua lần đầu tiên và bạn sẽ có một nguyên mẫu khá chắc chắn mà bạn có thể tùy chỉnh.
Có bất kỳ plugin nào giống với loại thử nghiệm này kết hợp thế hệ & không?
Và cảm ơn nếu bạn đã dành thời gian để đọc điều này .. Tôi biết nó là một chút dài.
Tôi nghĩ rằng đây khá một ý tưởng thú vị, tôi Recon nó sẽ là một công việc cho Ragel – scaney
Wow, đây là một ý tưởng tuyệt vời! Tôi đã không nghe nói về bất cứ điều gì mà làm điều này. Nếu bạn đi trước với kế hoạch của bạn, tôi sẽ rất quan tâm đến việc sử dụng plugin này và có lẽ đóng góp là tốt. Tôi hy vọng bạn sẽ blog rộng rãi về điều này và thậm chí có thể ping Ryan Bates để ông có thể làm một Railscast về nó, qua đó đảm bảo tiếp xúc với số lượng lớn của cộng đồng Rails. – Samo
@Samo - Tôi đang làm việc trên một nguyên mẫu đơn giản ngay bây giờ, cố gắng tìm ra các ins and outs .. và tôi có lẽ sẽ viết blog về nó trong tuần tới hoặc 2. Tôi sẽ gửi cho bạn một liên kết đến repo github sau Tôi đặt một số công việc vào nó và xem nếu một cái gì đó bạn muốn giúp đỡ. Cảm ơn! – johnmcaliley