ruby-on-rails - RSpec 问题模拟 HTTP 请求

标签 ruby-on-rails rspec

我如何为...编写 RSpec

Net::HTTP::Proxy(PROXY_HOST, PROXY_PORT).start(url.host) do |http|
  request = Net::HTTP::Post.new(url.path)
  request.form_data = {'param1' => 'blah1', 'param2' => 'blah2'}
  response = http.request(request)
end

这是我得到的...
@mock_http = mock('http')
@mock_http.should_receive(:start).with(@url.host)
Net::HTTP.should_receive(:Proxy).with(PROXY_HOST, PROXY_PORT).and_return(@mock_http)
Net::HTTP::Post.should_receive(:new).with(@url.path).and_return(@mock_http)

然而,当尝试...
Net::HTTP::Post.should_receive(:new).with(@url.path).and_return(@mock_http)

...收到以下回复...
<Net::HTTP::Post (class)> expected :new with ("/some/path") once, but received it 0 times

一个完整的解决方案将不胜感激!

最佳答案

我不确定您要准确测试什么,但以下是使用 webmock stub 此 http 请求的方法:

Gemfile :

group :test do
  gem 'webmock'
end

spec/spec_helper.rb :
require 'webmock/rspec'
WebMock.disable_net_connect!(:allow_localhost => true)

在您的测试中:
stub_request(:post, url.host).
  with(:body => {'param1' => 'blah1', 'param2' => 'blah2'},
  to_return(:status => 200, :body => '{ insert your response body expectation here }'

关于ruby-on-rails - RSpec 问题模拟 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9124545/

相关文章:

ruby-on-rails - 如何配置 Rails 应用程序以部署到 Tomcat

ruby-on-rails - 在 FactoryGirl 中干净地设置多个模型以进行测试/规范

ruby-on-rails - rails 3 : What is the correct Rails way of doing custom types?

ruby-on-rails - 单击链接以删除 Active Storage 和 Amazon S3 上的附件

ruby-on-rails - Magento API : get products from a category

ruby-on-rails - 为什么 url hepler 在测试中不起作用?

ruby-on-rails - fork 未正确安装在 rails 上

ruby-on-rails - Rspec:如何测试私有(private)方法中引发的异常?

Ruby Rspec3 期望接收一次对内部方法的调用

ruby-on-rails - 规范/邮件程序/预览中不提供Rails邮件程序预览