2012-06-22 3 views
5

Ich arbeite an der Integration meiner Rails-Anwendung mit Recurly.js.Wie JSONP-Aufruf in Rspec-Anforderungsspezifikation mit Capybara verspotten?

Bevor ich Anfragen von meiner serverseitigen Anwendung wiederholt, daher konnte ich alle meine Integration mit ausgezeichneten VCR Edelstein (https://github.com/myronmarston/vcr) stub, aber Recurly.js Anfrage direkt an den Dienst von Javascript-Code mit JSONP.

Die Frage ist: wie diese Jsonp Aufrufe im Integrationstest zu verspotten?

Derzeit verwende ich rspec + Capybara + PhantomJS Treiber (https://github.com/jonleighton/poltergeist)

Antwort

3

Der einzige Ansatz kam ich mit JavaScript-Patching on-the-fly. Was das Poltergeist Juwel, ein Verfahren ist Javascript direkt im Test-Browser ausführen, können Sie den folgenden Patch anwenden Recurly.js in den Testmodus zu aktivieren:

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

einfach ein Capybara-Makros macht, gibt eine fancy name wie 'stub_recurly_js' und rufen Sie jedes Mal auf, bevor Sie die Recurly.js-Formulare senden.

Hier ist auch ein Link zum Original-Beitrag, wenn man ein wenig tiefer graben will: http://pieoneers.tumblr.com/post/32406386853/test-recurlyjs-in-ruby-using-rspec-capybara-phantomjs

+1

Lone Link [eine schlechte Antwort betrachtet] ist (http://stackoverflow.com/faq#deletion), da sie von selbst und Zielressource bedeutungslos ist nicht am Leben sein garantiert in die Zukunft. [Es wäre besser] (http://meta.stackexchange.com/q/8259), hier die wesentlichen Teile der Antwort anzugeben und den Link als Referenz anzugeben. – j0k

2

Verwendung puffing-billy. Es fügt einen Proxy-Server zwischen Ihrem Test-Browser und der Außenwelt ein und ermöglicht es Ihnen, Antworten für bestimmte URLs zu fälschen.

Beispiel:

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