2011-10-21 26 views
15

Tôi đang gặp vấn đề làm cho hai yêu cầu để url tương tự trong một bài kiểm tra đường ray tích hợp, với rspeclàm hai yêu cầu với bộ điều khiển cùng trong đường ray tích hợp thông số kỹ thuật

it 'does something' do 

    # get '/something', {:status=>'any_other'}, @header ## <<<<< this line couses problem! 

    get '/something', {:status=>'ok'}, @header 
    doc = Nokogiri::HTML(response.body) 
    lis = doc.css('#the_id') 
    lis.size.should == 1 
    lis[0].text.should include('anything') 
end 

Nếu tôi làm cho hai yêu cầu với bộ điều khiển cùng , các thử nghiệm dường như để duy trì phản ứng cũ ...

trong ví dụ trên, nếu tôi bỏ ghi chú dòng, ngắt thử nghiệm + Nhà nó duy trì kết quả của 'truy vấn' đầu tiên

có một hạn chế của kiểm tra ngăn xếp, hoặc tôi làm điều gì sai?

Trả lời

1

kiểm tra tích hợp đường ray nên được viết sao cho trường hợp bật kiểm tra một yêu cầu duy nhất - chu kỳ phản hồi. chúng tôi có thể kiểm tra chuyển hướng. nhưng nếu bạn phải làm một cái gì đó giống như

get '/ cái gì đó', {: status => 'any_other'}, @header

get '/ cái gì đó', {: status => 'ok'}, @header

Bạn nên viết hai trường hợp khác nhau cho việc này.

+4

Nếu các nhà thiết kế của rspec không muốn bạn thực hiện một yêu cầu thứ hai, yêu cầu thứ hai nên nâng một ngoại lệ để ngăn chặn bạn làm như vậy. Bằng cách đó nó đi qua như một tính năng, không phải là một lỗi. Bất kỳ ý tưởng tại sao họ không làm điều đó? –

+1

Có, nhà thiết kế của rspec cung cấp cho bạn tính năng này. Yêu cầu của bạn như thế nào bạn muốn kiểm tra nó (theo hành vi thực tế của ứng dụng). –

1

Sử dụng Capybara thay vì rspec là giải pháp tốt hơn cho các bài kiểm tra tích hợp (yêu cầu). Nó sử dụng cú pháp giống như rspec và cho phép nhiều yêu cầu trong một khối duy nhất mà nó chặn. Tôi sử dụng rspec để kiểm tra đơn vị và capybara để thử nghiệm tích hợp.

1

Với bộ kiểm tra Rails cũ đồng bằng, kiểm tra chức năng dành cho yêu cầu duy nhất và nếu bạn muốn kiểm tra chảy bạn nên sử dụng thử nghiệm hội nhập (bạn có thể thiết lập lại bộ điều khiển trong các thử nghiệm chức năng).

Thông số kỹ thuật của bộ điều khiển từ rspec-ray kế thừa từ các kiểm tra chức năng của Rails, vì vậy chúng có cùng giới hạn. Bạn có thể sử dụng rspec với capybara hoặc webrat (tôi khuyên bạn nên sử dụng) cho các bài kiểm tra tích hợp.

Ngoài ra, phiên bản gần đây của rspec-ray có "thông số kỹ thuật theo yêu cầu" mà "trộn trong behaivour xét nghiệm hội nhập Rails": https://github.com/rspec/rspec-rails

0

Bạn cần phải xóa các biến dụ của bạn, hoặc có thể một trong những cần thiết mà thôi. Giả sử bạn sử dụng @book trong bộ điều khiển của mình.

get '/something' 
assert ... 
controller.instance_variable_set(:@book, nil) 
get '/something' 
assert ... 

Nếu bạn đang sử dụng inherit_resources

get '/something' 
assert ... 
controller.send(:set_resource_ivar, nil) 
get '/something' 
assert ... 
+0

Điều này không đủ tốt. RSpec giữ 'params' cũ nằm xung quanh, và nếu bạn chuyển một' params' mới cho yêu cầu thứ hai của bạn, 'params' mà controller của bạn thấy có thể gây ngạc nhiên đôi khi. –

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