使用webmock/rspec存储多部分请求

Kam*_*tka 5 ruby rspec sinatra rest-client webmock

我一直试图使用webmock来存储多部分请求并且没有找到令人满意的解决方案.

理想情况下,我想将请求存根如下:

stub_request(:post, 'http://test.api.com').with(:body => { :file1 => File.new('filepath1'), file2 => File.new('filepath2') })
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用,RSpec抱怨请求没有被删除.打印非存根请求:

stub_request(:post, "http://test.api.com").
     with(:body => "--785340\r\nContent-Disposition: form-data; name=\"file1\"; filename=\"filepath1\"\r\nContent-Type: text/plain\r\n\r\nhello\r\n--785340\r\nContent-Disposition: form-data; name=\"file2\"; filename=\"filepath2\"\r\nContent-Type: text/plain\r\n\r\nhello2\r\n--785340\r\n",
          :headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate', 'Content-Length'=>'664', 'Content-Type'=>'multipart/form-data; boundary=785340', 'User-Agent'=>'Ruby'}).
     to_return(:status => 200, :body => "", :headers => {})
Run Code Online (Sandbox Code Playgroud)

当然,我不能真正遵循这个建议,因为边界是动态生成的.知道如何正确存根这些请求吗?

谢谢!布鲁诺

jur*_*lic 2

WebMock 目前不支持多部分请求。请在此处查看作者的评论以获取更多信息:https://github.com/vcr/vcr/issues/295#issuecomment-20181472

我建议您考虑以下路线之一:

  • 在不匹配帖子多部分主体的情况下进行存根
  • 将请求包装在带有文件路径参数的方法中,并对此方法设置更细粒度的期望
  • 在集成测试中使用 VCR 模拟外部请求