よく使うマッチャ・メソッド・Faker集/deviseをテストでも/CarrierWaveを使った場合のRSpec
よく使うマッチャ
単体テストでのマッチャ
・eq
expect(assigns(:group)).to eq group
・include
expect(message.errors[:group]).to include('を入力してください')
・be_valid
expect(build(:message, image: nil)).to be_valid
・render_template
expect(response).to render_template :index
・be_a_new
expect(assigns(:message)).to be_a_new(Message)
・redirect_to 引数にとったプレフィックスにリダイレクトした際の情報を返す
expect(response).to redirect_to(new_user_session_path)
・change 引数が変化したかどうかを確かめる
expect{ subject }.to change(Message, :count).by(1)
フィーチャスペック(統合テスト)でのマッチャ
・have_no_content
引数に指定したバリューを持つHTML要素が、
そのページに存在しないことを確かめる
expect(page).to have_no_content('投稿する')
よく使われるFactoryBotのメソッド
・build インスタンスを作る
・create インスタンスを作る(一時的にDBにも保存する)
・create_list factory_botで設定されたリソースを元に配列を作る
・attributes_for オブジェクトを生成せずにハッシュを生成する
よく使うFaker
password = Faker::Internet.password(min_length: 8)
name {Faker::Name.last_name}
email {Faker::Internet.free_email}
name {Faker::Team.name}
deviseをテストでも
手順①
specディレクトリの直下にsupportディレクトリを作成
その中に、controller_macros.rbを作成
controller_macros.rbで、loginメソッドを定義する
module ControllerMacros def login(user) @request.env["devise.mapping"] = Devise.mappings[:user] sign_in user end end
手順②
rails_helper.rbに、以下2つを読み込む記述を追加
・deviseのコントローラのテスト用のモジュール を読み込む記述
・先ほど定義したControllerMacros を読み込む記述
RSpec.configure do |config| Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } config.include Devise::Test::ControllerHelpers, type: :controller config.include ControllerMacros, type: :controller #〜省略〜 end
画像アップロード CarrierWaveを使った場合の、modelのRSpec
参考記事: https://qiita.com/motty93/items/5cbc46ce79a502fcaa65