2013-03-02 63 views
98

Sự khác nhau về khái niệm giữa các số feature specsrequest specs của Rspec là gì?RSpec: Sự khác biệt giữa tính năng và thông số yêu cầu là gì?

Từ các tài liệu tính năng spec:

Tính năng kỹ thuật là những thử nghiệm cấp cao có nghĩa là để thực hiện chức năng lát thông qua một ứng dụng. Họ chỉ nên chạy ứng dụng qua giao diện bên ngoài , thường là các trang web.

Và đối với yêu cầu thông số kỹ thuật:

Yêu cầu thông số kỹ thuật cung cấp một wrapper mỏng xung quanh thử nghiệm hội nhập Rails', và được thiết kế để lái xe hành vi thông qua toàn bộ ngăn xếp, bao gồm định tuyến (cung cấp bởi Rails) và mà không cần cựa quậy (tùy thuộc vào bạn). Với yêu cầu thông số kỹ thuật, bạn có thể:

  • định một yêu cầu duy nhất
  • định nhiều yêu cầu trên nhiều bộ điều khiển
  • định nhiều yêu cầu trên nhiều phiên

Tôi biết rằng thông số kỹ thuật tính năng sử dụng Capybara và yêu cầu thông số kỹ thuật không. Nhưng điều đó hầu như không xứng đáng với các khái niệm khác nhau.

Trả lời

134

Sự khác biệt về khái niệm là bạn thường thử nghiệm một câu chuyện của người dùng và tất cả tương tác phải được điều khiển thông qua giao diện người dùng. Đó là nơi Capybara đến. Một yêu cầu spec vẫn đang kiểm tra hành vi của ứng dụng của bạn và không có mong đợi của khả năng đọc mà một thử nghiệm chấp nhận sẽ có. Vì vậy, tính năng là có cho cú pháp cải tiến cho các bài kiểm tra chấp nhận.

Sự khác biệt về kỹ thuật bao gồm các thông số yêu cầu bao gồm kiểm tra tích hợp Rails, trong khi đặc điểm kỹ thuật không. Điều này có nghĩa với yêu cầu thông số kỹ thuật bạn có thể sử dụng phương pháp nhận được, gửi, đặt, xóa và khẳng định chống lại phản ứng. Với đặc điểm tính năng, bạn nên thúc đẩy tất cả tương tác thông qua trình duyệt và sử dụng các phương pháp như truy cập và khẳng định trên trang.

Tôi khuyên bạn nên đọc feature_spec.feature trong mã nguồn rspec-ray trên github. Tôi hi vọng cái này giúp được.

+2

Vì vậy, bạn có khuyên bạn nên sử dụng cả thông số tính năng và yêu cầu, hoặc là một hay thông số khác đủ? (Là người mới đối với TDD ...) – robertwbradford

+2

Tôi sử dụng cả hai, @robertwbradford. Tôi sử dụng đặc điểm kỹ thuật để thúc đẩy bên ngoài của tôi trong các bài kiểm tra - kiểm tra trải nghiệm người dùng và sau đó xây dựng chức năng bằng cách sử dụng các bài kiểm tra đơn vị. Tôi sử dụng thông số yêu cầu để kiểm tra phản hồi - ví dụ: trong một session_spec tôi có thể có một mô tả '" GET/login "' block với các kỳ vọng trong các khối 'nó' như' expect (response.status) .to eq (200) 'và' expect (response) .to render_template (: mới) ', hoặc trong một' mô tả "POST/phiên" ', một' bối cảnh "với thông tin xác thực hợp lệ" 'khối, với' mong đợi (phản ứng) .to redirect_to (người dùng) 'và' follow_redirect !; mong đợi (response.body) .để bao gồm ("Đã đăng nhập") ' –

+5

Và bạn có sử dụng thông số kỹ thuật điều khiển không? Có vẻ như có một chút trùng lặp giữa những gì bạn kiểm tra trong thông số kỹ thuật yêu cầu và những gì thường được kiểm tra trong thông số kỹ thuật điều khiển. – Ernesto

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