ino-akiのブログ

ITエンジニアを目指して学習したことをアウトプットするブログ

Rails 単体テスト実装準備

テストで使うGemを導入
Gemfileの中のgroup :development, :test do ~ endとある「do ~ endの間」に記述
rspec-rails
factory_bot_rails
faker

% bundle install

 

ローカルサーバーを再起動
% rails s

 

導入したRSpecを使用できるようにする
% rails g rspec:install

 

テスト結果のログを見やすくする
.rspec
--require spec_helper
--format documentation

 

エラーメッセージを英語に設定

spec/rails_helper.rb
# 中略
I18n.locale = "en"
# RSpec.configure do |config| 〜 end の外に記載

RSpec.configure do |config|

# 中略

end

 

FactoryBotを準備

specディレクトリの中にfactoriesディレクトリを作成し、users.rb, rooms.rb, messages.rbの3つのファイルを作成

 

fakerを使って情報をFactoryBotに指定

ユーザー情報をFactoryBotで指定
spec/factories/users.rb
チャットルーム情報をFactoryBotで指定
spec/factories/rooms.rb
メッセージ情報をFactoryBotで指定
spec/factories/messages.rb

画像投稿にActive Storageを使う場合、FactoryBotにActive Storageの記述をする必要がある


テスト用のダミー画像を用意
「public」ディレクトリの中に「images」というディレクトリを作成
テスト用のダミー画像「test_image.png」を、imagesディレクトリの中に配置


画像は生成したインスタンスに紐付ける必要がある

afterというメソッドを用いて、インスタンス生成後に画像が保存されるようにする

afterメソッドは任意の処理の後に指定の処理を実行することができる

 

afterメソッドを用いて、生成するダミーデータに画像を添付

spec/factories/messages.rb

 

コンソールでFactoryBotが使用できることを確認
% rails c
pry(main)> FactoryBot.create(:user)
pry(main)> FactoryBot.create(:room)
pry(main)> FactoryBot.create(:message)


画像がActive Storageに保存できているか確認
pry(main)> message = FactoryBot.create(:message)
# 省略
pry(main)> message.image.attached?
# 省略
=> true


テストを記述するファイルを用意
テストコードを記述するファイルを各モデル分の3つ用意
% rails g rspec:model user
% rails g rspec:model room
% rails g rspec:model message

3つのファイルの不要な記述を削除
pending "add some examples to (or delete) #{__FILE__}"  # 削除


これで、RSpecを用いてテストを行う準備が完了