如何正确复制 Octokit 请求对 webmock 存根的响应的响应主体

5 rspec ruby-on-rails webmock octokit

Octokit 响应属于Sawyer::Response类型

它们看起来像这样:

{:name=>"code.py",
:content => "some content"}
Run Code Online (Sandbox Code Playgroud)

我正在尝试像这样存根我的请求

reponse_body = {:content => "some content"}
stub_request(:any, /.*api.github.com\/repos\/my_repo\/(.*)\/code.py/).to_return(:status => 200, :body => response_body)
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我然后调用 response.content,所以我希望能够从响应中获取内容。

我目前收到错误:'WebMock::Response::InvalidBody: must be one of: [Proc, IO, Pathname, String, Array]。'哈希'给出'。response_body 的正确格式是什么?如果我将其转换为 json,则无法对代码中的对象执行 response.content。

And*_*ler 3

您传递一个哈希作为预期响应,而 Webmock 不知道应该将其编码为什么(请参阅此 Webmock 问题)。正如您所提到的,您可以使用response_body.to_json,但是您将无法使用点符号来访问数据。

\n\n

由于您\xe2\x80\x99正在使用RSpec,所以我\xe2\x80\x99d利用测试双打来假装您有一个Sawyer::Resource对象:

\n\n
response_body = \n  [\n    double("Sawyer::Resource",\n      {\n        :name=>"code.py",\n        :content => "some content"\n      })\n  ]\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,您应该能够使用点符号访问数据,就像使用实际响应一样。

\n