Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何用capybara模拟rspec请求规范中的JSONP调用?_Ruby On Rails_Rspec_Jsonp_Integration Testing_Capybara - Fatal编程技术网

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

Ruby on rails 如何用capybara模拟rspec请求规范中的JSONP调用?,ruby-on-rails,rspec,jsonp,integration-testing,capybara,Ruby On Rails,Rspec,Jsonp,Integration Testing,Capybara,我正在将rails应用程序与recury.js集成 在我从服务器端应用程序发出Recury请求之前,因此我能够将所有与优秀VCR gem()的集成存根,但是recury.js使用JSONP从javascript代码直接向服务发出请求 问题是:如何在集成测试中模拟这些jsonp调用 目前我正在使用rspec+capybara+phantomjs驱动程序()我想到的唯一方法是动态的javascript补丁。只要Poltergeist gem有在测试浏览器中执行javascript的方法,您就可以应用

我正在将rails应用程序与recury.js集成

在我从服务器端应用程序发出Recury请求之前,因此我能够将所有与优秀VCR gem()的集成存根,但是recury.js使用JSONP从javascript代码直接向服务发出请求

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


目前我正在使用rspec+capybara+phantomjs驱动程序()

我想到的唯一方法是动态的javascript补丁。只要Poltergeist gem有在测试浏览器中执行javascript的方法,您就可以应用以下补丁将recury.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\u recury\u js”,并在每次提交recury.js表单之前调用它

如果你想更深入一点,这里还有一个原始帖子的链接:

使用。它在测试浏览器和外部世界之间插入代理服务器,并允许您伪造特定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
孤立链接是因为它本身是无意义的,并且目标资源不保证在将来仍然存在。在这里包括答案的基本部分,并提供链接供参考。