記事の対象者
・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"と入力して検索してください。
RSpec.configure do |config|
/ここから
config.include Devise::Test::IntegrationHelpers, type: :system
config.include Warden::Test::Helpers
/ここまで
〜(以下略)
FactoryBotでUserモデルのダミーデータを作る
ユーザー情報を作りましょう。spec以下にfactoriesフォルダを作成し、user.rbファイルを追加してください。ここは、自分のUseモデルの情報を参考に作成してみてください。
参考に、私が作ったダミーデータを記載します。
Fakerを使用すると簡単にダミーデータを作ることができます。
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 を追加するだけです!
私は投稿機能の確認に必要だったのですが、この手順でエラーがなくなりました。
describe '活動地点の登録画面のテスト' do
before do
/ここから
sign_in user
/ここまで
visit new_activity_point_path
end
おわりに
current_user を使用している方はぜひこの方法を試してみてください。
最後まで読んでいただきありがとうございました。