2012-03-15 14 views
7

Trong dự án Rails 3.2 của tôi, tôi thỉnh thoảng gửi yêu cầu http đến http://jsonip.com từ Javascript. Nhưng khi chạy Cucumber với thẻ @javascript, yêu cầu sẽ được gửi rất thường xuyên. Điều này rõ ràng là rất không mong muốn và tôi muốn yêu cầu như vậy. Bây giờ, tôi nghĩ rằng tôi có thể sử dụng stub_request từ webmock cho điều này, như vậy:Đưa các yêu cầu Ajax vào Cucumber/Capybara/Selenium?

Before do 
    stub_request(:any, /.*jsonip.*/).to_return(:body => '{"ip":"24.104.73.2","about":"/about"}') 
end 

nhưng ngay cả với điều này tại chỗ, jsonip được gọi từ Javascript. Và tôi thấy rằng webmock không thực sự yêu cầu Ajax (ít nhất là không có câu lệnh trên stub_request).

Cách thích hợp để yêu cầu Ajax yêu cầu trong thiết lập Cucumber/Capybara/Selenium là gì?

Trả lời

3

Cách duy nhất để làm điều đó là thay đổi url hoặc vô hiệu hóa yêu cầu tùy thuộc vào ứng dụng môi trường được chạy.

Bạn không thể yêu cầu này từ bên kiểm tra vì yêu cầu này được thực hiện bởi trình duyệt không phải bởi ứng dụng của bạn.

Cũng như giải pháp tạm thời hoặc giải pháp cho máy chủ CI, bạn có thể tắt url này trong tệp máy chủ.

+0

Hmmm, vâng ... tôi sợ điều đó. Tôi đã nhận nó để làm việc ngay bây giờ bằng cách tạo ra một biến Javascript giữ 0 khi môi trường Rails được phát triển, 1 khi nó là kiểm tra và 2 khi nó được sản xuất. Sau đó tôi ngăn chặn cuộc gọi Ajax tới dịch vụ bên ngoài khi biến bằng 1. Không phải là giải pháp đẹp nhất, nhưng nó hoạt động. Cảm ơn, Iafonov. –

3

Bạn có thể sử dụng puffing-billy https://github.com/oesmith/puffing-billy cho mục đích đó. Tôi đang sử dụng nó để giả định các cuộc gọi JSONP đến Recurly trong ứng dụng của tôi.

+0

Điều này làm việc hoàn hảo cho tôi. Cảm ơn bạn! – Franco