2011-10-26 27 views
28

Tôi đã spec sau:Làm thế nào để kiểm tra mã phản hồi với Capybara + Selenium

it "deletes post", :js => true do 
... 
... 
page.status_code.should = '404' 

end 

Dòng page.status_code được đem lại cho tôi lỗi này:

Capybara::NotSupportedByDriverError 

Làm thế nào để kiểm tra mã trạng thái của trang ?

+0

liên quan: https://groups.google.com/forum/?fromgroups=#!topic/ruby-capybara/KdMvhjcjm8E – tokland

Trả lời

15

status_code hiện không được trình điều khiển Selenium hỗ trợ. Bạn sẽ cần viết một bài kiểm tra khác để kiểm tra mã trạng thái phản hồi.

3

Hoặc chuyển sang trình điều khiển khác (như rack-test) cho thử nghiệm đó hoặc kiểm tra xem trang được hiển thị là trang 404 (phải có nội dung 'Không tìm thấy' trong h1).

Như @eugen đã nói, Selenium không hỗ trợ mã trạng thái.

40

Là một sang một bên. Dòng này

page.status_code.should = '404' 

Nên

page.status_code.should == 404 

này làm việc cho tôi với Capybara-webkit.

+0

một người dùng khác Capybara-webkit là ở đây nhưng 'mong đợi (page.status_code) .to (200) 'trả về' Capybara :: NotSupportedByDriverError'. Bạn có ý kiến ​​gì không? – scaryguy

2

Selenium web driver doest không triển khai status_code và không có cách nào trực tiếp để kiểm tra response_code với selen (sự lựa chọn của nhà phát triển).

Để kiểm tra nó tôi đã thêm trong cách bố trí của tôi/application.html.erb:

<html code="<%= response.try(:code) if defined?(response) %>">[...]</html> 

Và sau đó trong thử nghiệm của tôi:

def no_error? 
    response_code = page.first('html')[:code] 
    assert (response_code == '200'), "Response code should be 200 : got #{response_code}" 
end 
3

Hãy thử nó ra

expect(page).to have_http_status(200) 
+5

Hi Ajay; mã của bạn có thể đúng, nhưng với một số ngữ cảnh, nó sẽ tạo ra một câu trả lời tốt hơn; ví dụ: bạn có thể giải thích cách thức và lý do thay đổi được đề xuất này sẽ giải quyết vấn đề của người hỏi, có thể bao gồm liên kết đến tài liệu có liên quan. Điều đó sẽ làm cho nó hữu ích hơn cho họ, và cũng hữu ích hơn cho người đọc trang web khác, những người đang tìm kiếm các giải pháp cho các vấn đề tương tự. –

1

Sử dụng js để đưa ra yêu cầu và nhận trạng thái như sau:

js_script = <<JSS 
xhr = new XMLHttpRequest(); 
xhr.open('GET', '#{src}', true); 
xhr.send(); 
JSS 
actual.execute_script(js_script) 
status = actual.evaluate_script('xhr.status') # get js variable value 

Kiểm tra https://gist.github.com/yovasx2/1c767114f2e003474a546c89ab4f90db để biết thêm chi tiết

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