2012-06-22 13 views
5

私はRecurly.jsを使ってレールアプリケーションとの統合を進めています。capybaraでrspecリクエスト仕様でJSONP呼び出しをモックする方法は?

私はサーバサイドのアプリケーションから定期的にリクエストしていたので、優れたVCR gem(https://github.com/myronmarston/vcr)との統合をすべてスタブすることができましたが、Recurly.jsはJSONPを使用してjavascriptコードからサービスに直接リクエストします。

問題は、統合テストでこれらのjsonp呼び出しを擬似する方法ですか?

現在、私は私が思いついただけのアプローチは、オンザフライjavascriptのパッチ適用をあるRSpecの+カピバラ+ phantomjsドライバ(https://github.com/jonleighton/poltergeist

答えて

3

を使用しています。ポルターガイスト宝石は、テストブラウザで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 
関連する問題