Сообщение об ошибке этоWebmock и хэш вопросы
WebMock :: Response :: InvalidBody: должен быть один из: [Proc, IO, PathName, строка, массив]. «Hash» дал
Я использую этот код, чтобы проверить библиотеку Google для получения информации о пользователе в мой контроллер
stub_request(:get, "https://www.googleapis.com/userinfo/v2/me")
.to_return(
body: {email: "[email protected]", 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.name
auth_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>
служба является авторизацией с помощью Google, а затем запросить данные пользователя, которые я могу получить доступ с response.email и response.name.
Однако, поскольку gogle google получает информацию и создает хэш из нее, я не могу делать JSON.parse и т. Д. В строке.
Каким образом это можно сделать?
Набор тестов: Rspec, капибары, webmock, VCR
Я бы рекомендовал издеваться над этим сервисом напрямую, а не издеваться над HTTP-вызовом по всему миру. Я думаю, вам будет легче. 'allow (my_service) .to receive (: my_method) .and_return (my_results)' – steel
@steel спасибо за ваше сообщение, однако я не совсем уверен, как использовать это, я написал это, 'allow (service) .to receive (: get_userinfo_v2) .and_return (электронная почта: «[email protected]», имя: «petros») ', но я получаю неопределенную локальную переменную или метод« сервис », какой смысл имеет смысл? –
Да, это будет больше похоже: 'allow (Google :: Apis :: Oauth2V2 :: Oauth2Service.new) .to получать (: get_userinfo_v2) .and_return (OpenStruct.new (имя:« Petros », электронная почта:« test @ test.con "))' –