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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

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

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

0回答

448閲覧

【RSpec】Twitterログインのテストの書き方

d0ne1s

総合スコア32

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

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

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2020/05/22 12:04

状況、実現したいこと

omniauth-twitterというgemを使ったTwitterログイン機能を備えたサービスがあります。
ログイン方法はTwitterログインだけです。

ログインのテストの書き方が分からず、アドバイスをいただきたいです。

ログイン処理の流れ

  • ログインボタンをクリックすると/auth/twitterにリクエストが飛ぶ
  • Twitter画面で連携を許可すると、sessions#createが発火する(request.env['omniauth.auth']ユーザーの情報が渡される)
  • すでに登録されているユーザーならログイン、未登録のユーザーなら新規登録

※ログイン機能を実装した時に、大まかな流れを以下の記事にまとめました。
Railsアプリに簡単なTwitterログインを実装する

View

1<a href="/auth/twitter">ログイン</a>

Controller

1# 超Fatなのはテストを書いた後に直します 2def create 3 unless request.env['omniauth.auth'][:uid] 4 flash[:danger] = '連携に失敗しました' 5 redirect_to(root_url) && return 6 end 7 user_data = request.env['omniauth.auth'] 8 user = User.find_by(uid: user_data[:uid]) 9 if user 10 log_in user 11 flash[:success] = 'ログインしました' 12 else 13 new_user = User.new( 14 uid: user_data[:uid], 15 nickname: user_data[:info][:nickname], 16 name: user_data[:info][:name], 17 image: user_data[:info][:image], 18 desc: user_data[:info][:description] 19 ) 20 if new_user.save 21 log_in new_user 22 flash[:success] = 'ユーザー登録成功' 23 else 24 flash[:danger] = '予期せぬエラーが発生しました' 25 redirect_to(root_url) && return 26 end 27 end 28 redirect_to mypage_url(current_user) 29end

table

1# usersテーブルの情報 2Table name: users 3 id :bigint not null, primary key 4 desc :string 5 fav_battle :string 6 fav_p_line :string 7 image :string 8 name :string 9 nickname :string 10 uid :string 11 created_at :datetime not null 12 updated_at :datetime not null 13 mc_id :bigint

routes

1Rails.application.routes.draw do 2 resources :mypages, only: %i[show edit update] 3 get '/auth/:provider/callback', to: 'sessions#create' 4 get '/logout', to: 'sessions#destroy' 5end

やってみたこと、調べてわかったこと

問題点、分からないこと

  • 上記のFacebookログインの記事ではOmniAuth.configという記述が多用されていまずが、omniauthのgemは使っていないのでそのまま使うことはできません。OmniAuth.configという、gem側で用意されているメソッド?を使わないとうまくテストが書けないのか、使わないでもなんとかなるのかの判断ができていない状態です。(私の使っているgemomniauth-twitterでは、OmniAuth.configに相当するものは用意されていない様子)
  • モックを作れた場合、capybaraを使った統合テストで活用できるものなのかが分かっていません。「トップページにアクセス→ログインボタンをクリック→ユーザー名が表示される」というテストを書けると一番良いのですが、難しいなら他の方法で実装するしかないと思っています。
  • ログイン後の振る舞いをテストする際、「ログイン済みのユーザーを作成する」ヘルパーメソッド等が必要になるが、実装方法が浮かんでいません。

まとまりの無い文章ですみません。要は

今の実装のままでログインの統合テストが書けるのか

どうかが知りたいです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問