質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.45%

  • Ruby on Rails

    4899questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • HTTP

    398questions

    HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

  • RSpec

    144questions

    RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

  • LINE Messaging API

    45questions

rspecにおけるline login機能の検証エラー: Net::HTTPBadResponse: wrong status line: "{"

受付中

回答 0

投稿 2017/06/19 21:41 ・編集 2017/06/19 21:46

  • 評価
  • クリップ 0
  • VIEW 173

yusukechief

score 6

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で質問しよう!

ただいまの回答率

91.45%

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails

    4899questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • HTTP

    398questions

    HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

  • RSpec

    144questions

    RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

  • LINE Messaging API

    45questions