首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Webmock和散列问题

Webmock和散列问题
EN

Stack Overflow用户
提问于 2017-02-01 21:41:11
回答 2查看 2.8K关注 0票数 0

错误消息是

WebMock::Response::InvalidBody:必须是: Proc、IO、Pathname、String、Array。“散列”给定

我正在使用下面的代码来测试google库,以便在我的控制器中获取用户信息。

代码语言:javascript
复制
stub_request(:get, "https://www.googleapis.com/userinfo/v2/me")
      .to_return(
        body: {email: "test@test.con", name: "Petros"},
        headers: {"Content-Type"=> ["application/json","charset=UTF-8"]}
      )

这是控制器代码

代码语言:javascript
复制
service = auth_with_oauth2_service(calendar_account.get_token)
      response = service.get_userinfo_v2

      calendar_account.user_id = current_user.id
      calendar_account.email = response.email
      calendar_account.name = response.name

auth_with_oauth2_service包含以下内容

代码语言:javascript
复制
def auth_with_oauth2_service(access_token)

    auth_client = AccessToken.new access_token
    service = Google::Apis::Oauth2V2::Oauth2Service.new
    service.client_options.application_name = "****"

    service.authorization = auth_client

    return service
  end

响应内容形式

代码语言:javascript
复制
#<Hurley::Response GET https://www.googleapis.com/userinfo/v2/me == 200 (377 bytes) 647ms>
Success - #<Google::Apis::Oauth2V2::Userinfoplus:0x007ff38df5e820
 @email="****",
 @family_name="Kyriakou",
 @gender="male",
 @given_name="Petros",
 @id="",
 @link="***",
 @locale="en-GB",
 @name="Petros Kyriakou",
 @picture=
  "***",
 @verified_email=true>

服务是使用谷歌授权,然后请求用户数据,我可以通过response.email和response.name访问。

但是,由于google获取信息并从中创建一个散列,所以我不能对字符串执行任何JSON.parse等操作。

做这件事的方法是什么?

测试套件: Rspec,capybara,webmock,VCR

EN

回答 2

Stack Overflow用户

发布于 2019-03-19 11:17:38

在WebMock中,哈希不被接受为响应体。如果响应体是json,则需要将散列编码为json:

代码语言:javascript
复制
{ email: "test@test.con", name: "Petros" }.to_json
票数 3
EN

Stack Overflow用户

发布于 2017-02-01 21:54:25

编辑:

根据Steel的评论,如果您要使用存根方法,那么您将需要链接存根。你可以试试这个:

代码语言:javascript
复制
service = Object.new
allow(Google::Apis::Oauth2V2::Oauth2Service).to receive(:new).and_return(service)
allow(service).to receive(:get_userinfo_v2).and_return(OpenStruct.new( name: "Petros", email: "test@test.con" ))

这使得正在发生的事情变得非常明显。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41990298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档