5

我正在将我的 rails 应用程序与 Recurly.js 集成。

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

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

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

4

2 回答 2

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

只需制作一个 capybara-macros,给它起一个花哨的名称,例如 'stub_recurly_js' 并在每次提交 Recurly.js 表单之前调用。

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

于 2012-10-04T04:31:25.710 回答
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
于 2012-10-15T09:16:15.417 回答