2011-08-03 35 views
5

Tôi mới sử dụng thử nghiệm Cucumber.Tính năng dưa chuột và các định nghĩa về bước

Tôi đã tạo ra hai tính năng tập tin:

events.feature 
partner.feature 

và có định nghĩa bước của tôi trong một thư mục step_definitions:

./step_definitions/ 
    events.rb 
    partner.rb 

Dường như dưa chuột sẽ tìm trong tất cả các file rb cho các thông tin bước .

Có cách nào hạn chế đối tượng địa lý để xem tệp định nghĩa bước cụ thể không?

Lý do tại sao tôi muốn làm điều này, là bởi vì tôi nhận được lỗi kết hợp mơ hồ, ngay cả khi tôi sử dụng cờ --guess.

Lý do tại sao tôi muốn làm điều này là vì những lý do sau. Tôi đang thử nghiệm CMS và muốn kiểm tra từng loại nội dung khác nhau (sự kiện & đối tác) trong các tính năng riêng biệt.

events.feature

Feature: Add partner 
    As an administrator I can add a new partner 

    Scenario: Create partner 
    Given I am logged in 
    When I create a partner 
    Then I should see content 

partner.feature

Feature: Add event 
    As an administrator I can add a new event 

    Scenario: Create event 
    Given I am logged in 
    When I create an event 
    Then I should see content 

Chỉ cần tập trung vào 'sau đó tôi sẽ thấy nội dung' mà là trong cả hai kịch bản, các lỗi xảy ra bởi vì trong các tập tin rb Tôi cần bao gồm:

đối tác.rb

Then /^I should see content$/ do 
    BROWSER.html.should include('SOME PARTNER CONTENT') 
end 

events.rb

Then /^I should see content$/ do 
    BROWSER.html.should include('SOME EVENT CONTENT') 
end 

có nghĩa là có một trận mơ hồ của "Tôi sẽ thấy nội dung".

Tôi hiểu có nhiều cách khác nhau của cơ cấu này, tức là tôi có thể tạo ra một tính năng nội dung, và sử dụng kịch bản phác thảo:

Feature: Add content 
    As an administrator I can add a new content 

    Scenario Outline: Create content 
    Given I am logged in 
    When I create an <content type> 
    Then I should see <example content> 

    Examples: 
    |event |March Event | 
    |partner |Joe Blogs | 

Nhưng tôi không muốn làm điều này vì tôi muốn để đóng gói từng nội dung gõ vào tính năng thử nghiệm của riêng họ.

Vì vậy, về cơ bản tôi cần phải tìm hiểu cách chạy các tệp bước cụ thể theo tính năng tôi đang thử nghiệm.

Trả lời

9

Dưa chuột luôn tải tất cả các tệp và tôi không nghĩ rằng có cách để ghi đè hành vi này.Về vấn đề của bạn với các bước mơ hồ - giải pháp rất dễ dàng - thêm các thông số bước chân của bạn

Then /^(?:|I)should see "([^"]*)"$/ do |text| 
    page.should have_content(text) 
end 

Và trong kịch bản chỉ cần gọi nó như thế này

Sau đó, tôi sẽ thấy "ĐỐI TÁC CONTENT"

  • tiền thưởng miễn phí - kịch bản của bạn giờ đây dễ đọc hơn nhiều
+0

Tôi đồng ý với cách này. Nó cũng mang tính biểu cảm hơn nhiều, vì các bước của bạn nên như vậy. –

1

Tôi không thấy điều gì sai với phương pháp thay thế mà bạn đề xuất. Việc tách các định nghĩa bước thành các miền logic hợp lý. Tuy nhiên, có vẻ như bạn có thể đang cố gắng mang nó quá xa, và điều đó sẽ dẫn đến một lượng lớn mã trùng lặp và các vấn đề với các kết quả không rõ ràng như bạn đang thấy bây giờ. Tôi muốn khuyên bạn nên làm một cái gì đó như thế này:

Feature: Add partner 
    As an administrator I can add a new partner 

    Scenario: Create partner 
    Given I am logged in 
    When I create a partner 
    Then I should see "partner content" 

Và tương tự, tính năng sự kiện của bạn:

... 
Then I should see "event content" 

Sau đó, bạn có thể điều sau đây trong một riêng biệt step_definitions/common_steps.rb file:

Then /I should see "(.*)"$/ do |content| 
    BROWSER.html.should include(content) 
end 

Bước này không có bất kỳ đối tác/sự kiện cụ thể nào về nó. Thay vào đó, các tình huống chứa các chuỗi dữ liệu cụ thể cho các tính năng của bạn.

Nếu bạn đang làm việc trên ứng dụng Rails, đá quý cucumber-rails sẽ thực sự tạo một loạt các bước phổ biến để thử nghiệm ứng dụng web cho bạn. Ngay cả khi bạn không sử dụng Rails, có thể hữu ích khi xem một số trong số steps này.

+0

Vâng - Tôi thấy điểm của bạn về mã trùng lặp - cảm ơn. – JonB

0

Tôi đã tìm kiếm điều này, nhưng dường như không thể "thoát khỏi hộp".

Giải pháp của tôi là để phân biệt các bước luôn luôn sử dụng một số loại mô tả bổ sung, chẳng hạn như tên lớp, ví dụ:

Scenario: Buildings List 
    Given I have a Building with code "B1" 
    And I have a Building with code "B2" 
    When I go to the list of buildings 
    Then I should see "B1" building code 
    And I should see "B2" building code 

Những "mã xây dựng" mô tả là tất cả các bạn không cần phải tái sử dụng bước giữa các tập tin khác nhau/tên miền.

Các vấn đề liên quan