错误消息是
WebMock::Response::InvalidBody:必须是: Proc、IO、Pathname、String、Array。“散列”给定
我正在使用下面的代码来测试google库,以便在我的控制器中获取用户信息。
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"]}
)这是控制器代码
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.nameauth_with_oauth2_service包含以下内容
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响应内容形式
#<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
发布于 2019-03-19 11:17:38
在WebMock中,哈希不被接受为响应体。如果响应体是json,则需要将散列编码为json:
{ email: "test@test.con", name: "Petros" }.to_json发布于 2017-02-01 21:54:25
编辑:
根据Steel的评论,如果您要使用存根方法,那么您将需要链接存根。你可以试试这个:
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" ))这使得正在发生的事情变得非常明显。
https://stackoverflow.com/questions/41990298
复制相似问题