2012-06-22 27 views
5

Tôi đang làm việc để tích hợp ứng dụng đường ray của tôi với Recurly.js.Làm thế nào để thử gọi JSONP trong thông số yêu cầu rspec với capybara?

Trước khi tôi thực hiện yêu cầu đệ quy từ ứng dụng phía máy chủ, do đó tôi có thể tạo tất cả tích hợp với gem VCR tuyệt vời (https://github.com/myronmarston/vcr) nhưng Recurly.js yêu cầu trực tiếp dịch vụ từ mã javascript bằng JSONP.

Câu hỏi đặt ra là: cách thử các cuộc gọi jsonp này trong bài kiểm tra tích hợp?

Hiện nay tôi đang sử dụng rspec + Capybara + phantomjs lái xe (https://github.com/jonleighton/poltergeist)

Trả lời

3

Phương pháp duy nhất mà tôi đã đưa ra là on-the-fly vá javascript. Theo như viên ngọc Poltergeist có một phương pháp để thực thi javascript ngay trong trình duyệt kiểm tra, bạn có thể áp dụng các bản vá sau để biến Recurly.js vào chế độ kiểm tra:

# The original 'save' function performs JSONP request to Recurly. 
# A token is borrowed during the real API interaction. 
page.driver.execute_script(""" 
    Recurly.Subscription.save = function (options) { 
    Recurly.postResult('/subscription', { token: 'afc58c4895354255a422cc0405a045b0' }, options); 
    } 
""") 

Chỉ cần làm một Capybara-macro, đưa ra một tên ưa thích như 'stub_recurly_js' với nó và gọi mỗi lần trước khi gửi biểu mẫu Recurly.js.

Đây cũng là một liên kết đến bài gốc nếu bạn muốn đào sâu hơn một chút: http://pieoneers.tumblr.com/post/32406386853/test-recurlyjs-in-ruby-using-rspec-capybara-phantomjs

+1

liên kết Lone được [coi là một câu trả lời nghèo] (http://stackoverflow.com/faq#deletion) vì nó là vô nghĩa của chính nó và tài nguyên mục tiêu không được bảo đảm được sống trong tương lai. [Nó sẽ là thích hợp hơn] (http://meta.stackexchange.com/q/8259) để bao gồm các phần thiết yếu của câu trả lời ở đây, và cung cấp liên kết để tham khảo. – j0k

2

Sử dụng puffing-billy. Nó tiêm một máy chủ proxy giữa trình duyệt thử nghiệm của bạn và thế giới bên ngoài, đồng thời cho phép bạn trả lời giả cho các URL cụ thể.

Ví dụ:

describe 'my recurly jsonp spec' do 

    before do 
    # call proxy.stub to setup a fake response 
    proxy.stub 'https://api.recurly.com/v2/foo', :jsonp => { :bar => 'baz' } 
    end 

    it 'does something with recurly' do 
    .... 
    end 
end 
Các vấn đề liên quan