1
1

More than 3 years have passed since last update.

Railsでポートフォリオを作ってみよう! vol.3 (RSpec・FactoryBot編 前編)

Posted at

前回、データベースの作成とUsermodelの作成を行った。
また、Usermodelに入ってくる情報に対するバリデーションも作成したのが前回までのあらすじ。
今回はバリデーションという機能が正しく実装されたことを確認するために、「テスト」と呼ばれるものを作成していきたい。

テストとは

製作したアプリケーションが正常な動作を行なっているかの確認を行うこと

となっている。
テストを書くことによりバグやエラーを本番環境に落とす前に気づくことができる上に、リファクタリングの難易度も大きく下がることになる。
また、一言にテストと言っても、どういうタイミング(テスト駆動・一括テスト)で書いたほうが適しているか等、複雑な状況があるので詳しくはRailsTutorialの第3章の「テストから始める」を参照にしてみると良いかもしれない。
RailsTutorial(テストから始める)

上記URLの通り、RailsTutorialではrailsを作った際に一緒についてくる「minitest」と呼ばれるものを使用してテストを行うが、今回はより実践的にするために「RSpec」を使用してテストを作成していく。

RSpecとは

Ruby用に作成されたテスティングフレームワークのこと。
人が行うようなバグの発見などの作業を全て自動化してくれるすごい奴。(ただしテストコードは全部人が書くけど・・・)
ちなみにRSpecのRはRuby、Specはテストコードの事であり、綴りはSも大文字表記であることに注意。
RSpec専用の参考書があるのでそれを参考に勉強してみるのも良い。
Everyday Rails - RSpecによるRailsテスト入門

導入

Gemfileに以下のgemを導入する。
導入した後にはbundle execを行う。

group :development, :test do
  gem 'rspec-rails'
  gem 'factory_bot_rails'
  gem 'rails-controller-testing'
end

#以下gemは後ほど導入する
group :development do
  gem 'spring-commands-rspec'
end

rspec-rails

RSpecの本体。これがないと何も始まらない。

factory_bot_rails

テストデータの作成を行うgemの一つ。
RailsTutorialではuser.ymlにテストモデルを記入していたが、RSpecではfactorybotがそれの代わりになる。
少し前までfactory_girl_railsとしてあったが、問題があった為名前が変更された。

rails-controller-testing

Rails5からは非推奨となっているassignsassert_templateを実行できるようにするgem。
余談だが、Rails5からはcontroller specは非推奨となり、新たにrequest specで記述することが推奨されている。
詳しくはEverydayRailsにて
Replacing RSpec controller specs, part 1: Request specs

spring-commands-rspec

RSpecのテスト実行スピードを上げるgem
このgemを導入したら bin/rails を使用せず -> bundle exec rspecを使用すること。

ちなみに

今回の開発環境ではDocker-composeを使用して開発を行っている為、ここで一度コンテナをDownしないとgemがインストールされない事象に見舞われてしまうので注意が必要。
ただ、Docker-composeを使っていない人はいつも通りサーバーを再起動すればよい。

実行

DBを作成する

導入が完了したらbin/rails db:create:allを叩きDBを作成する。
もしここでDBが無いよエラーが発生したらconfig/datebase.yml内の以下の文があるか確認する。
無いようであれば追加する。

datebase.yml
#SQLiteを使っていれば以下の文を確認
test:
  <<: *default
  database: db/test.sqlite3

#MySQLまたはPostgreSQLを使っていれば以下の文を確認
test:
  <<: *default
  database: projects_test

RSpecをインストールする

DBの作成が完了したら以下を叩く

bin/rails generate rspec:install

叩いたら
.rspec
spec
spec/spec_helper.rb
spec/rails_helper.rb
の4つが作成されるのでまず.rspecを開き

--require spec_helper
--format documentation <-この一行を追加する

--format documentationはRSpecからの出力をドキュメントに変更している。
必須事項では無いが、スペックがパス or エラーしたかがわかりやすい形式で出力されるため記入している。

spring-commands-rspecの導入

group :development にspring-commands-rspecを導入する。
bundle installも忘れずに。

これで導入は終了。
本当に入っているかどうかはわからない為、一度bin/rspecを打ちRSpecが走れば実装完了。
次回からテストの実装を行う。

1
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
1
1