二足のわらじ

〜プログラミングとSEOの勉強をはじめたミーハー26歳のメモ帳〜

よく使うマッチャ・メソッド・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