2012-06-22 74 views
5

我正在整合我的Rails應用程序與Recurly.js。如何在rspec請求規範中使用capybara模擬JSONP調用?

在我從服務器端應用程序重複發出請求之前,因此我能夠用優秀的VCR gem(https://github.com/myronmarston/vcr)將所有集成存儲在一起,但Recurly.js使用JSONP直接從JavaScript代碼發出請求。

問題是:如何在集成測試中模擬這些jsonp調用?

目前我使用的RSpec +水豚+ phantomjs驅動程序(https://github.com/jonleighton/poltergeist

回答

3

我想出的唯一辦法是即時的JavaScript補丁。至於創業板騷靈具有執行測試瀏覽器的JavaScript正確的方法,你可以使用下面的補丁把Recurly.js進入測試模式:

# 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); 
    } 
""") 

只是做一個水豚的宏,給看起來像'stub_recurly_js'這樣的名字,並在提交Recurly.js表單之前每次調用它。

這裏也是原來的帖子的鏈接,如果你想更深入一點:http://pieoneers.tumblr.com/post/32406386853/test-recurlyjs-in-ruby-using-rspec-capybara-phantomjs

+1

孤立鏈路[視爲不良回答(http://stackoverflow.com/faq#deletion),因爲它是由本身沒有意義和目標資源沒有保證在活未來。 [這將是最好的](http://meta.stackexchange.com/q/8259)在這裏包括答案的基本部分,並提供鏈接供參考。 – j0k

2

使用puffing-billy。它在您的測試瀏覽器和外部世界之間注入代理服務器,並允許您僞造特定URL的響應。

實施例:

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 
相關問題