2013-01-06 27 views
12

Tôi đang viết các bài kiểm tra RSpec và tôi đã đến một điểm mà tôi không đọc cùng ý kiến ​​trên các trang web khác nhau. Cấu trúc thư mục cho RSpec là rõ ràng khi chúng ta đang xử lý các spec/controller và các thư mục spec/models, nhưng thông tin mâu thuẫn mà tôi nhận được có giao dịch với các khung nhìn thử nghiệm.Quy ước đặt tên RSpec cho các tệp và cấu trúc thư mục

Tôi muốn chỉ cần đặt các thử nghiệm này trong thư mục spec/integration /, nhưng tôi đã đọc rằng nó được cho là theo spec/integration, nhưng một cuốn sách khác cho biết thông số/yêu cầu. Điều này có quan trọng không?

Để làm phức tạp hơn nữa tình hình, tôi đã đọc thông tin xung đột về cách đặt tên tệp thực tế của các bài kiểm tra! Ví dụ, nếu tôi có một thư mục điều khiển/mô hình/xem gọi là 'người' (I i sử dụng Haml), tôi nên đặt tên các tập tin như thế này:

đặc tả/hội nhập/people.html.haml_spec.rb

Tuy nhiên, cuốn sách khác gợi ý này:

đặc tả/yêu cầu/people_spec.rb

tôi muốn một chút giải thích về việc đặt tên con ventions trong RSpec và TẠI SAO tôi nên đặt tên cho khung nhìn kiểm tra tên cụ thể, cũng như có hay không quan trọng để đặt chúng theo spec/tích hợp hoặc spec/yêu cầu. Tôi cảm thấy như tôi đang đi với gió ở đây.

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

10

Kiểm tra ngày của sách và các phiên bản của RSpec mà chúng được viết. Cấu trúc đặt tên đã thay đổi một chút theo thời gian.

Theo tài liệu cho rspec-rails, yêu cầu thông số kỹ thuật có thể đi theo thông số/yêu cầu, spec/api hoặc spec/tích hợp. Tôi thích đặt thông số kỹ thuật yêu cầu trong thông số/yêu cầu.

Để làm cho mọi việc thú vị hơn, nếu bạn đang sử dụng Capybara với rspec-ray, nó sẽ làm việc với spec/yêu cầu Capybara 1.x, và spec/tính năng cho Capybara 2.

Đối với file spec cá nhân tên, khi có một lớp học cụ thể dưới kiểm tra, giống như một mô hình Rails, bạn nên sử dụng một tên file spec tương tự:

app/models/user.rb ->spec/models/user_spec.rb

Xem thông số kỹ thuật nên sử dụng tên mẫu:

.210

app/views/users/index.html.erb ->spec/views/users/index.html.erb_spec.rb

mô hình namespaced nên bao gồm các không gian tên trong đường dẫn file spec:

app/models/admin/user.rb ->spec/models/admin/user_spec.rb

Các máy phát điện giàn giáo RSpec là một hướng dẫn tốt cho thấy nơi những thông số kỹ thuật thuộc.

Khi không có lớp cụ thể nào được kiểm tra, như trường hợp có thông số kỹ thuật yêu cầu, IMHO bạn nên sử dụng tên mô tả thứ đang được kiểm tra. Ví dụ. spec/requests/place_an_order_spec.rb.

+0

Không nên xem thông số kỹ thuật được định dạng 'spec/views/user.html.erb_spec.rb' thay vì' spec/views/user.html.erb'? Ngoài ra, 'spec/views/user.html.erb' có vẻ giống như một ví dụ lạ, không phải' spec/views/users/index.html.erb' có ý nghĩa hơn không? –

+0

@ Robd'Apice Bạn nói đúng, bắt tốt. – zetetic

+0

Guys! Điều gì sẽ xảy ra nếu tôi muốn có hai tệp đặc tả cho một mô hình đơn lẻ? Ví dụ: đầu tiên cho phạm vi và thứ hai cho một số logic ... Bất kỳ đề xuất? 'user_scopes_spec.rb' và' user_my_feature_name_spec.rb'? –

1

Các tệp được đọc bởi đá quý rspec đơn giản là các tệp kết thúc bằng _spec.rb và nằm ở bất kỳ vị trí nào trong hệ thống phân cấp bên dưới thư mục spec miễn là phần trên cùng của phân cấp là một từ alpha-số. thư mục có tên spec/##/ sẽ không được xem xét trong thông số kỹ thuật tạo) Đây là dòng có liên quan của mã mà thực hiện điều này, trong /gems/rspec-rails-2.14.1/lib/rspec/rails/tasks/rspec.rake:.

namespace :spec do 
    types = begin 
    dirs = Dir['./spec/**/*_spec.rb']. 
      map { |f| g=f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') ; puts ">>> Found #{g}."; g }. 
      uniq. 
      select { |f| File.directory?(f) } 
    Hash[dirs.map { |d| [d.split('/').last, d] }] 
    end 

Vì vậy, tất cả các văn bản trong tên tập tin trước để _spec.rb là một quy ước - nó doesn' t thay đổi cách Rails xử lý các tệp.

Tôi phải đọc kỹ mã này để tìm hiểu ý nghĩa của từng tên thư mục, dưới spec, là - nó được chuyển đến tác vụ spec của Rake được tạo, vì vậy nó được sử dụng cho một cái gì đó nhưng tôi không biết những gì.

+0

Cảm ơn bạn đã đề cập đến việc chọn tệp. Tùy thuộc vào thư mục, các trình trợ giúp khác nhau được tải. https://www.relishapp.com/rspec/rspec-rails/docs/directory-structure – maikel

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