Sắp xếp.
Nó là một cách để tổ chức kiểm tra, nhưng còn hơn thế nữa. Nó hoạt động như các thử nghiệm tích hợp Rails ban đầu được cho là, nhưng dễ sử dụng hơn nhiều. Chiến thắng lớn ở đây là phiên của bạn được duy trì một cách minh bạch trên toàn bộ Scenario
.
Một điều khác đang xảy ra với Cucumber là bạn (được coi là) thử nghiệm từ quan điểm của trình duyệt hoặc ứng dụng khách sử dụng mã của bạn. Nếu bạn muốn, bạn có thể sử dụng các bước để xây dựng các đối tượng và thiết lập trạng thái, nhưng thông thường bạn muốn các bước của bạn đi qua các chuyển động cần thiết để đạt được trạng thái đó ngay từ đầu.
Ví dụ bạn thể làm điều này:
Given /I have a user account/ do
@user = Factory.create(:user)
# ... more user set up
end
Nhưng có lẽ bạn nên làm điều gì đó như thế này thay vì:
Given /I have a user account/ do
visit new_user_url
fill_in "user_login", :with => "some name"
fill_in "user_password", :with => "foo"
# ... whatever else your sign up page needs
end
Và tất nhiên bạn có thể vượt qua trong lập luận cho một trong những bước để cung cấp cho mã gọi của bạn một số chi tiết hơn kiểm soát hành vi của bước.
Điều tôi thường làm với các thử nghiệm của mình là như sau.
- Tôi sử dụng shoulda, nhưng rspec cũng được.
- Tôi viết các thử nghiệm xác thực phủ định của mình (tức là Truy cập bị từ chối được mong đợi) dưới dạng kiểm tra chức năng Rails.
- Tôi viết các bài kiểm tra xác thực tích cực của mình (tức là người dùng thực hiện những gì họ có nghĩa vụ phải làm) như các tính năng của Cucumber.
Và, tất nhiên, tôi vẫn viết bài kiểm tra đơn vị Rails cho các mô hình của tôi, thư viện, những người giúp đỡ vv
Tôi không đồng ý rằng ví dụ "nên" tốt hơn ví dụ "có thể". Sự đồng thuận chung là nó hoàn toàn tốt để sử dụng các nhà máy trong các bước Given để thiết lập các điều kiện trước cho những gì thực sự được kiểm tra trong các bước. –
Chắc chắn. Tôi cũng sử dụng các nhà máy ở một số bước của tôi. Có một mức độ phong phú của chủ quan liên quan. Tôi đã cố gắng chỉ ra mục đích chung của Cucumber (lái xe phần mềm của bạn như là một người dùng sẽ). Tôi đã không cố gắng quy định một cách thực sự để viết tất cả các bước. – jdl