LoginSignup
0
1

More than 1 year has passed since last update.

【RSpec】システムテストでcurrent_userが使えないことを解決する

Posted at

記事の対象者

・RSpecのシステムテストでユーザーの情報を渡す方法を知りたい方

前提条件

Ruby 2.6.3
Rails 6.1.5

< gem >
・capybara
・rspec-rails
・factory_bot_rails
・faker

解決方法の手順

結論、この手順で進めると解決することができました!

・rails_helperにDeviseを記述する(include)
・FactoryBotでUserモデルのダミーデータを作る
・システムテスト画面のbeforeでsign_userを記述する

私がハマったところ

devise機能のcurrent_userをテストでも使用できる思っておりました。
しかし、エラーが出てしまうため、アドバイスをいただいたところ、下記のことが判明しました。

current_user はテスト項目が通らない

ということで、deviseのヘルパーを使用してuser情報を渡す方法がありました。
1つずつ手順を書いていきます。

rails_helperにDeviseを記述する(include)

下記2行を追加してください。
詳しくはdeviseの公式GitHubのwikiで"test"と入力して検索してください。

rails_helper.rb
RSpec.configure do |config|
/ここから
  config.include Devise::Test::IntegrationHelpers, type: :system
  config.include Warden::Test::Helpers
/ここまで

〜(以下略

FactoryBotでUserモデルのダミーデータを作る

ユーザー情報を作りましょう。spec以下にfactoriesフォルダを作成し、user.rbファイルを追加してください。ここは、自分のUseモデルの情報を参考に作成してみてください。
参考に、私が作ったダミーデータを記載します。
Fakerを使用すると簡単にダミーデータを作ることができます。

spec/factories/user.rb
FactoryBot.define do
  password = Faker::Internet.password(min_length: 6, max_length: 8)

  factory :user do
    email { Faker::Internet.email } #=> "eliza@mann.net"
    password { password }
    password_confirmation { password }
    last_name { Faker::Lorem.characters(number: 5) } #=> 5文字生成
    first_name { Faker::Lorem.characters(number: 5) } #=> 5文字生成
    nickname { Faker::Lorem.characters(number: 5) } #=> 5文字生成
    introduction { Faker::Lorem.characters(number: 30) } #=> 30文字生成
    is_deleted { false } #=> boolen型
  end
end

システムテスト画面のbeforeでsign_userを記述する

後は、使用したい部分で sign_in user を追加するだけです!
私は投稿機能の確認に必要だったのですが、この手順でエラーがなくなりました。

spec/system/テストしたいところ_spec.rb
 describe '活動地点の登録画面のテスト' do
    before do
   /ここから
      sign_in user 
    /ここまで
      visit new_activity_point_path
    end

おわりに

current_user を使用している方はぜひこの方法を試してみてください。
最後まで読んでいただきありがとうございました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1