2012-11-21 18 views
8

Tôi hiện đang cố gắng tìm hiểu dưa leo và cách sử dụng đúng cách. Khi tìm kiếm các phương pháp hay nhất, hầu hết cách cũ đều được mô tả và tôi chưa thực sự tìm thấy hướng dẫn tốt. Tôi đã đọc về cách mới để làm điều đó nhưng tôi có một số vấn đề với cách thực hành tốt nhất.Làm thế nào để viết dưa chuột cho đường ray (Thực hành tốt nhất). Tính năng và các bước

Sau đây là một số kịch bản dưa chuột cơ bản mà tôi đang nghiên cứu.

Scenario: Unsuccessful login 
    Given a user has an account 
    When the user tries to log in with invalid information 
    Then the user should see an log in error message 

Scenario: Successful login 
    Given a user has an account 
    When the user logs in 
    Then the user should see an log in success message 
    And the user should see a sign out link 

Scenario: Successful logout 
    Given a signed in user 
    Then the user logs out 
    And the user should see an log out success message 

Tôi tự hỏi điều này có ổn không? Tôi có vấn đề nếu tôi nên viết nó là "tôi ghé thăm" hoặc "truy cập của người dùng" hoặc "anh ấy truy cập" Về cơ bản những gì được ưa thích?

Thứ hai Tôi tự hỏi làm thế nào tôi nên xây dựng như sau:

Scenario: Visit profile of user 
    Given a user 
    And a second user 
    When the user visit the user profile 
    Then the user should see the name of the user 

Scenario: Visit profile of another user 
    Given a user 
    And a second user 
    When the user visit the second users profile 
    Then the user should see the name of the second user 

Đây chỉ là một cái gì đó tôi đặt lại với nhau nhưng tôi cảm thấy rằng nó không phải là cách tốt nhất. Tôi gặp sự cố trong các tệp định nghĩa bước của mình. Làm thế nào bạn sẽ xác định các bước để xử lý các kịch bản? Tôi muốn viết một cái gì đó tổng quát hơn, nhưng có lẽ nó không thực sự có thể? Tôi có nên có thuộc tính @second_user hoặc bạn đề xuất gì không?

def user 
    @user ||= FactoryGirl.create :user 
end 

Given /^a signed in user$/ do 
    user 
    sign_in(@user.email, @user.password) 
end 

Given /^a user has an account$/ do 
    user 
end 


When /^the user logs in$/ do 
    sign_in(@user.email, @user.password) 
end 

When /^the user logs out$/ do 
    click_link ('Sign out') 
end 

When /^the user tries to log in with invalid information$/ do 
    sign_in("incorrect-email", "incorrect-password") 
end 

Then /^the user should see a sign out link$/ do 
    page.should have_link('Sign out') 
end 

Then /^the user should see an log in success message$/ do 
    should have_success_message('Signed in successfully.') 
end 

When /^the user should see an log out success message$/ do 
    should have_success_message('Signed out successfully.') 
end 

Then /^the user should see an log in error message$/ do 
    should have_error_message('Invalid email or password.') 
end 

Cảm ơn vì đã giúp tôi!

Trả lời

4

Tôi gặp sự cố nếu tôi nên viết nó là "Tôi truy cập" hoặc "lượt truy cập của người dùng" hoặc "anh ấy truy cập" Về cơ bản những gì được ưa thích?

Tôi nghĩ việc sử dụng nội dung nào đó như "khi người dùng truy cập" sẽ chung chung hơn và dễ đọc hơn vì bạn không phải suy nghĩ "ai là 'anh'?" nếu bạn đang đọc các bài kiểm tra, những gì thực sự quan trọng là bạn dính vào một số quy ước trong tất cả các tập tin của bạn để bạn không bị lẫn lộn. Đối với câu hỏi thứ hai của bạn về việc tạo @second_user hay không, tôi nghĩ bạn không nên vì người dùng này không chính xác là một phần trong kịch bản của bạn nhiều như thiết lập dữ liệu và tôi nghĩ cách tốt nhất để xử lý dữ liệu thiết lập là sử dụng pickle with cucumber, về cơ bản nó cho phép bạn tạo các mô hình trong dưa chuột của bạn mà không cần phải giữ chúng như biến với bạn, có một số great cast on RailsCast giải thích rất nhiều.

vì vậy tôi sẽ làm điều này bằng dưa

Scenario: Visit profile of another user 
    Given a user exists with name: "Mike", username: "mike" 
    And a signed in user 
    When the user visits the profile of "mike" 
    Then the user should see 'Mike' 

sau đó bạn có thể định nghĩa

When /^the user visits the profile of (.+)$/ do |username| 
    visit("/#{username}") # I am assuming here usernames are unique and the profile url is "/:username" 
end 
+0

Cảm ơn. Có vẻ như không có cách nào xung quanh thêm một số khớp nối giữa các mô hình và các tính năng dưa chuột. Hy vọng của tôi là không có bất kỳ thông tin nào như tên người dùng: trong các tính năng của tôi nhưng có vẻ như không có cách nào tốt đẹp xung quanh nó. –

+1

Bạn được chào đón, tôi nghĩ rằng không có gì sai nếu có khớp nối, bởi vì đó là lý do tại sao chúng tôi viết tests.For ví dụ, nếu bạn thay đổi mô hình người dùng không có trường tên người dùng thì kịch bản này không thành công. và sau đó bạn sẽ sửa mô hình hoặc thay đổi kịch bản. – Khaled

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