Ruby on rails 如何用capybara模拟rspec请求规范中的JSONP调用?
我正在将rails应用程序与recury.js集成 在我从服务器端应用程序发出Recury请求之前,因此我能够将所有与优秀VCR gem()的集成存根,但是recury.js使用JSONP从javascript代码直接向服务发出请求 问题是:如何在集成测试中模拟这些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的方法,您就可以应用
目前我正在使用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
孤立链接是因为它本身是无意义的,并且目标资源不保证在将来仍然存在。在这里包括答案的基本部分,并提供链接供参考。