2009-11-09 10 views
11

Có thể ai đó vui lòng làm rõ bằng câu chuyện người dùng SIMPLE toàn bộ nội dung của Cucumber sẽ được sử dụng và RSpec sẽ được sử dụng để làm gì? Tôi đã mua cuốn sách RSpec ngày hôm kia và đã trải qua nó. Tác giả dường như khá mơ hồ vào những thời điểm.TDD/BDD Rails Số lượng trùng lặp Dưa chuột/RSpec

Những gì tôi đang nghĩ đến việc nếu những câu chuyện sử dụng là một cái gì đó tương tự (xin vui lòng tha các incorrectness cú pháp, đây chỉ là để bạn có được điểm):

Khi người dùng nhập một số điện thoại không hợp lệ sau đó họ nhận được một thông báo cho biết "Số điện thoại không hợp lệ"

Nếu tôi viết ra tất cả mã cho Cucumber để kiểm tra điều này và sau đó viết những thứ rspec, tôi về cơ bản nhân đôi bài kiểm tra của tôi. Có một kịch bản nào để giải thích cách kiểm tra dưa chuột phải khác với thử nghiệm rspec không?

Tôi cảm thấy như bạn sẽ lặp lại các thử nghiệm trên cả hai cấp độ.

Nếu không có câu trả lời dứt khoát về điều này, tôi sẽ bắt đầu nghĩ rằng người dân dưa chuột không muốn bước vào những ngón chân của người RSpec.

Vui lòng trợ giúp. Tôi cảm thấy như đầu mình sắp nổ tung.

Cảm ơn!

Trả lời

12

Dưa chuột được sử dụng để giải thích (làm cho một mô tả) của một phần (câu chuyện) của ứng dụng chứ không phải là kiểm tra đơn vị hoặc kiểm tra hành vi (mà là trọng tâm của RSpec)

Vì vậy, kiểm tra IMHO dưa chuột (tầng) không thay thế cho các thử nghiệm rspec.

Kiểm tra RSpec có xu hướng thúc đẩy sự phát triển của các mô hình và bộ điều khiển và những câu chuyện có xu hướng thúc đẩy sự phát triển của các chế độ xem.

Bằng cách mô tả của bạn có vẻ như bạn đang sử dụng dưa chuột để cả hai thử nghiệm những câu chuyện và hành vi

+0

Tôi hoàn toàn đồng ý, đây cũng là trải nghiệm của tôi. –

2

Dưa chuột có thể được sử dụng để chạy khá nhiều bất kỳ mã, đó là lý do tại sao tôi nghĩ rằng bạn đang nhận được lẫn lộn. Nhưng dưa chuột không cung cấp các loại phương tiện thử nghiệm khác như phương pháp nhạo báng và cứng nhắc làm cho đơn vị thử nghiệm cụ thể hơn.

Công cụ rspec thực sự có ý định giải quyết các bit nhỏ về hành vi và làm mọi thứ rất riêng biệt. Nếu bạn đã quen thuộc với việc kiểm tra đơn vị và các khung công tác cho điều này sẽ có ý nghĩa hơn.

Tiện ích dưa chuột có thể dịch mô tả cấp cao thành tập hợp các hành động cấp cao nhất trên hệ thống.

5

Rspec và dưa chuột là độc lập và bạn có thể sử dụng dưa chuột và một khung kiểm tra khác cho thử nghiệm của bạn (đơn vị kiểm tra, shoulda vv).

Vấn đề là, bạn muốn thử nghiệm gì với dưa chuột? Bởi vì thực sự bạn có thể kết thúc kiểm tra trùng lặp và điều đó sẽ không thực sự hữu ích phải không? :)

Có những triết lý khác nhau với dưa chuột.

Với dưa chuột bạn có thể làm:

DMA (có nghĩa là truy cập mô hình trực tiếp, Có bạn có thể hoàn toàn kiểm tra mô hình của bạn như bạn sẽ làm gì trong rspec)

Simulated browzer (truy cập toàn bộ MVC chồng , không javascript)

Trình duyệt tự động (sử dụng webrat và selen để truy cập chế độ xem của bạn, với javascript, chậm hơn, browzer thực)

Những gì tôi muốn làm là sử dụng dưa chuột để kiểm tra những gì được trả lại cho người dùng. Đây thường là điều có ý nghĩa đối với tôi khi tôi định nghĩa câu chuyện của mình vì tôi không thực sự nhớ mã tôi sẽ viết. Vì vậy, tôi đang thử nghiệm kết quả cuối cùng với Cucumber -> views (sử dụng browzer mô phỏng hoặc tự động)

Sau đó, tôi sử dụng rspec để kiểm tra bất kỳ mã nào tôi viết trong bộ điều khiển và mô hình.

Như vậy trong trường hợp của bạn,

Khi người dùng nhập một số điện thoại không hợp lệ sau đó họ nhận được một thông báo "Invalid Số điện thoại"

Tôi sẽ sử dụng Webrat để kiểm tra xem người dùng có được Số điện thoại không hợp lệ trong chế độ xem. Tôi sẽ sử dụng Rspec để kiểm tra hành động và mô hình điều khiển của tôi.

13

Nó có thể được sử dụng để xem các chương trình phát sóng tại BDDCasts.com. Họ hướng dẫn bạn cách tạo các câu chuyện và thông số cho ứng dụng. Nó thực sự đã giúp tôi. Cũng sở hữu cuốn sách rspec, nhưng vẫn còn bối rối. Bạn thậm chí có thể muốn kiểm tra nguồn của họ trên github.

Đối với tôi nó đi như thế này:

  • Dưa chuột để kiểm tra những gì người dùng sẽ thấy. (Kiểm tra ngăn xếp đầy đủ)

  • Rspec để kiểm tra mọi thứ khác. (Model, điều khiển)

6

suy nghĩ của dưa chuột như kiểm tra toàn bộ ứng dụng của bạn, từ bên ngoài vào, nơi RSpec là đơn vị thử nghiệm các module cụ thể. Bạn bắt đầu bằng cách xác định những hành vi nào bạn muốn ứng dụng của bạn có trong Cucumber sau đó thả xuống RSpec và mô tả các lớp và mô-đun làm cho hành vi đó hoạt động.

Tôi mất một thời gian để có được nó nhưng tôi thấy Cucumber thực sự tốt cho việc mô tả rộng rãi các tính năng bạn muốn ứng dụng của bạn làm và RSpec thực sự mô tả cách thực sự thực hiện.

Vì vậy, bạn sẽ nói trong câu chuyện dưa chuột của mình về loại tính năng bạn muốn và viết các bước siêu đơn giản để cung cấp đầu vào và xem đầu ra. Sau đó, bạn thả xuống RSpec và viết thông số kỹ thuật về cách nó thực sự nên làm điều đó.

Giả sử tính năng của bạn là khả năng tìm kiếm tên người dùng trên trang web.Bạn có thể viết một tính năng dưa chuột và người đầu tiên (và duy nhất đầu tiên) kịch bản như thế này:

Feature: Search users 
    In order to find people with similar interests as myself 
    As a user 
    I want to search for people 

Scenario: Search for similar hobbies 
    Given there is a search page 
    And there is a list of hobbies 
    And one of the hobbies is "full contact ironing" 
    When I select "full contact ironing" 
    And press search 
    Then a list of users with the hobby "full contact ironing" are shown 

Bạn chạy dưa chuột, nó sẽ cho bạn biết các bước bạn đang bỏ lỡ, bạn sao chép những người và tạo ra các bước đơn giản để kiểm tra cho công cụ này nhưng không viết bất kỳ mã nào.

Khi bạn đã hoàn tất với các định nghĩa bước, bạn thả xuống RSpec và bắt đầu viết thông số kỹ thuật về cách bạn muốn tính năng này hoạt động. (Dưa chuột tất nhiên nên không)

describe "SearchController" do 

    it "should respond to searches" do 
    sc = SearchController.new 
    sc.should respond_to(:search) 
    end 

end 

Bạn chạy RSpec và xem nó thất bại sau đó đi ra và viết mã của bạn:

class SearchController 

    def search 
    end 

end 

Vậy là xong. Bây giờ chạy thử nghiệm của bạn một lần nữa. Nó sẽ vượt qua để bắt đầu nhận được cụ thể hơn và bắt đầu mô tả cách bạn sẽ thực sự sử dụng tính năng tìm kiếm. Tôi không muốn nhận được quá sâu vào nó, tôi chỉ muốn cung cấp cho bạn ý tưởng rằng bạn mô tả những gì bạn muốn trong dưa chuột sau đó mô tả như thế nào nó thực sự nên làm việc trong RSpec. Tất nhiên bạn có thể làm mọi thứ trong Cucumber hoặc mọi thứ trong RSpec nhưng tôi đã thực sự tìm thấy Cucumber giúp tôi nói theo những cách rất đơn giản những gì tôi muốn ở đâu nếu tôi cố gắng làm điều đó trong RSpec tôi bị sa lầy trong các chi tiết. Nếu tôi sử dụng Cucumber đầu tiên để mô tả các tính năng cơ bản tôi muốn và tại sao sau đó tôi có thể thả vào RSpec và nói làm thế nào tôi muốn các tính năng để thực sự làm việc.

Đôi khi, đôi khi sẽ có đôi khi các thử nghiệm của bạn không phải là DRY, nhưng nếu bạn cho rằng đó là vấn đề chi tiết, điều đó có thể không làm bạn phiền lòng nhiều. Tôi đã làm rất nhiều nỗ lực sao chép lúc đầu cho đến khi tôi nhận ra tôi chỉ nên nói chung những gì tôi muốn ở Cucumber sau đó nói cụ thể những gì tôi muốn trong RSpec.

Đây chỉ là ý tưởng của một người mới về cách sử dụng các công cụ nhưng dường như nó vẫn hoạt động tốt cho tôi. Tôi có thể đã cho bạn một ví dụ khủng khiếp nhưng tôi chỉ cố gắng để có được điểm trên các chi tiết chung để cụ thể chi tiết tôi đã tìm thấy hữu ích khi sử dụng các công cụ.