rspecにおけるline login機能の検証エラー: Net::HTTPBadResponse: wrong status line: "{"
- 評価
- クリップ 0
- VIEW 1,391
LINE loginの機能をruby on railsで実装しました。現在は、そのテストをrspecとwebmock(Line loginの外部APIを使用するため)を使って行なっております。
↓以下のエラー文が表示され、うまく解決できません。ググってみたところsslに関連したエラーのようですがsslについてよくわかっておらず解決できません
1) LineLoginsController POST #callback line login when line_account is already registered in DB when user is already registered in DB redirects to the show_shifts_user_path
Failure/Error: stub_request(:post, 'https://api.line.me/v2/oauth/accessToken')
Net::HTTPBadResponse:
wrong status line: "{"
#./spec/controllers/line_logins_controller_spec.rb:43:in `block (3 levels) in <top (required)>'
↓以下がrspecデータです。一部省略しています。
require 'spec_helper'
require 'webmock'
include WebMock::API
WebMock.enable!
AUTHORIZATION_CODE_RESPONSE = <<-EOS.freeze
{
"code":"b591dfd32eacc791df",
"state":"123abc",
}
EOS
ACCESS_TOKEN_RESPONSE = <<-EOS.freeze
{
"scope":"P",
"access_token":"bNl4YEFPI/hjFWhTqexp4MuEw5YPs7qhr6dJDXKwNPuLka...",
"token_type":"Bearer",
"expires_in":2591977,
"refresh_token":"8iFFRdyxNVNLWYeteMMJ"
}
EOS
PROFILES_CONTENT = <<-EOS.freeze
{
"displayName":"BOT API1",
"userId":"u206d25c2ea6bd87c17655609a1c37cb8",
"pictureUrl":nil,
"statusMessage":"Hello, LINE!"
}
EOS
WebMock.allow_net_connect!
RSpec.describe LineLoginsController, type: :controller do
describe 'POST #callback line login' do
let!(:fixed_user) { create(:fixed_user) }
let!(:line_account) { create(:line_account) }
before(:each) do
fixed_user.confirm
stub_request(:post, 'https://api.line.me/v2/oauth/accessToken') #line43 <--ここでエラー発生
.to_return (body = ACCESS_TOKEN_RESPONSE, status = 200)
stub_request(:post, 'https://api.line.me/v2/profile')
.with( headers: { 'Authorization' => "Bearer #{ACCESS_TOKEN_RESPONSE.access_token}" })
.to_return (body = PROFILES_CONTENT, status = 200)
end
context 'when line_account is already registered in DB' do
context 'when user is already registered in DB' do
it 'redirects to the show_shifts_user_path' do
post :callback, params: AUTHORIZATION_CODE_RESPONSE
expect(response).to redirect_to "/users/#{fixed_user.id}/show_shifts_today_of"
end
end
end
end
end
**追記
エラー部分のrubyコードを下に書きました
def receive_access_token_from
response = line_api_client.post do |req|
req.url '/v2/oauth/accessToken'
req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
req.params = {
grant_type: 'authorization_code',
client_id: ENV['CHANNEL_ID_FOR_LINE_LOGIN'],
client_secret: ENV['CHANNEL_SECRET_FOR_LINE_LOGIN'],
code: params[:code],
redirect_uri: "#{ENV['HEROKU_ROOT']}/line_logins/callback"
}
end
hash = JSON.parse(response.body)
@access_token = hash['access_token']
end
このエラーの解決方法をどなたかわかりませんでしょうか?
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる