2012-02-10 7 views
22

Tôi đã chỉ tự hỏi làm thế nào những người khác tổ chức các tập tin spec lớn (đặc biệt là cho các mô hình) với nhiều bối cảnh và phần tổ chức trong mô tả khối để xác nhận và thông số kỹ thuật khác có thể được nhóm theo một số cách có ý nghĩa.Rspec & lớn tập tin spec tổ chức

Bạn có giữ tất cả các thông số kỹ thuật liên quan đến một mô hình trong cùng một tệp thông số cho mô hình đó hay bạn chia thành các mô-đun theo cách này hay cách khác?

Tôi chưa bao giờ quan tâm quá nhiều về điều này cho đến nay nhưng tôi tự hỏi những gì người khác làm, vì dường như không có một số thỏa thuận xung quanh một thực hành tốt nhất hoặc như vậy.

Tôi có một số tệp mẫu khá lớn cho một số mô hình mà tôi muốn sắp xếp thành các tệp nhỏ hơn và ít hoặc không có chức năng nào được chia sẻ trên các mô hình khác nhau nên tôi không chắc chắn để đi về điều này (bất kể reusability) hoặc cho dù có một số cách tốt hơn. Bất kỳ đề xuất?

Xin cảm ơn trước.

+0

Tôi thường giữ mọi thứ trong một tệp và gấp/mở các khối để điều hướng mã tốt hơn một chút. Đó là một nỗi đau trong các tập tin khổng lồ nhưng tôi không bao giờ chiến đấu với sự lười biếng của tôi để tách các bài kiểm tra trong các phương thức lớp/thể hiện, gọi lại/xác thực, v.v ... – apneadiving

+0

Tôi đoán bạn chỉ có thể sử dụng include và mixin mỗi tệp vào cơ sở theo cách đó. Tổ chức các tệp theo lớp/phân lớp trong cấu trúc thư mục như là quy ước. Tôi nghĩ rằng đây là những gì tôi sẽ làm, cùng với câu trả lời của David dưới đây. Cảm ơn câu hỏi giết người! – ipd

Trả lời

22

bối cảnh lồng nhau có thể giúp bạn ở đây, nhưng giữ cho nó nông (thường sâu một cấp). Có hai biến để xem xét trong mỗi ví dụ: givens (trạng thái bắt đầu) và phương thức nào đang được gọi. Bạn có thể nhóm mọi thứ theo phương thức hoặc trạng thái:

# by method 
describe Stack do 
    describe "#push" do 
    it "adds an element to an empty stack" 
    it "adds an element to a non-empty stack" 
    end 

    describe "#pop" do 
    it "returns nil from an empty stack" 
    it "returns the last element of a non-empty stack" 
    it "removes the last element from a non-empty stack" 
    end 
end 

# by state 
describe Stack do 
    context "when empty" do 
    specify "push adds an element" 
    specify "pop returns nil" 
    end 

    context "when not empty" do 
    specify "push adds an element" 
    specify "pop returns last element" 
    specify "pop removes last element" 
    end 
end 

Tôi đã sử dụng cả hai cách tiếp cận và thấy cả hai đều hoạt động thực sự tốt và thực sự kém. Chìa khóa cho một trong hai cách tiếp cận là các ví dụ kể một câu chuyện khi bạn đọc từ trên xuống dưới. Khi các yêu cầu phát triển, điều này có nghĩa là bạn cần xem lại tệp này, giống như bạn thực hiện mã triển khai của mình. Một cách dễ dàng để kiểm tra xem spec có ý nghĩa là để chạy nó với các định dạng tài liệu:

rspec stack_spec.rb --format documentation 

này spits ra tất cả các tên theo thứ tự (với điều kiện bạn không sử dụng rand --order):

Stack 
    #push 
    adds an element to an empty stack 
    adds an element to a non-empty stack 
    #pop 
    returns nil from an empty stack 
    returns the last element of a non-empty stack 
    removes the last element from a non-empty stack 

hoặc

Stack 
    when empty 
    push adds an element 
    pop returns nil 
    when not empty 
    push adds an element 
    pop returns last element 
    pop removes last element 

Khi bạn thấy sản lượng này, nó sẽ được khá rõ ràng đối với bạn cho dù tổ chức bạn đang sử dụng có ý nghĩa hay không.