如何用capybara模拟rspec请求规范中的JSONP调用?

lua*_*sus 5 integration-testing jsonp rspec ruby-on-rails capybara

我正在使用Recurly.js集成我的rails应用程序.

在我从我的服务器端应用程序发出重复请求之前,因此我能够将所有与优秀VCR gem(https://github.com/myronmarston/vcr)的集成存根,但Recurly.js直接向服务发出请求使用JSONP的javascript代码.

问题是:如何在集成测试中模拟这些jsonp调用?

目前我正在使用rspec + capybara + phantomjs驱动程序(https://github.com/jonleighton/poltergeist)

And*_*hin 3

我想到的唯一方法是即时 javascript 修补。至于 Poltergeist gem 具有在测试浏览器中执行 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);
  }
""")
Run Code Online (Sandbox Code Playgroud)

只需创建一个水豚宏,为其指定一个奇特的名称,例如“stub_recurly_js”,并在每次提交 Recurly.js 表单之前调用。

如果您想更深入地挖掘,这里还有原始帖子的链接:http://pieoneers.tumblr.com/post/32406386853/test-recurlyjs-in-ruby-using-rspec-capybara-phantomjs