5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RSpecの導入&関係の深いgemについて

Last updated at Posted at 2021-01-09

※2022年から技術系の記事は個人ブログに投稿しております。ぜひこちらもご覧ください→yamaday0u Blog

Ruby on Railsのテスト用のgemであるRSpecの導入と関係するgemについて整理します。

RSpecとは

Ruby on Railsのテストコードを書くために用いられるgemです。
実際のgem名は「rspec-rails」です。

ユーザーの新規登録やログイン、メッセージの投稿や編集などの機能をテストするために使用します。

Rubyには標準でmini_testという別のテスト用Gemが導入されているのですが、開発現場ではRSpecが主流だそうです。

RSpecのインストール

Gemfileに以下のように記述し、ターミナルでbundle installを入力します。

Gemfile
#group :development, :testというグループの中に記述する。
group :development, :test do
  gem 'rspec-rails', '~> 4.0.0'
end
ターミナル
$ bundle install

RSpecの設定をする

ターミナルで以下のとおり入力して、ディレクトリとファイルを生成します。

ターミナル
$ rails g rspec:install
#上記実行後、下記のディレクトリとファイルが生成される
      create  .rspec
      create  spec
      create  spec/spec_helper.rb
      create  spec/rails_helper.rb

.rspecファイルに以下の記述をします。テストコードの実行結果をターミナル上に可視化するために記述します。

.rspec
--require spec_helper
--format documentation #この一文を追加

RSpecについてはここまです。

RSpecと関係の深いgem

RSpecとよく一緒に使用するgemとしてFactoryBotとFakerがあります。

FactoryBotとは

インスタンスをまとめることができるgemで、他のファイルであらかじめ各クラスのインスタンスに定める値を設定しておき、各テストコードで使用します。

RSpecと同様にGemfileのgroup :development, :testというグループの中に記述してからインストールします。

Gemfile
group :development, :test do
  gem 'factory_bot_rails'
end
ターミナル
$ bundle install

簡単な紹介になりますが、FactoryBotは以下のように記述して使います。※アプリにUsersテーブルがあると想定

spec/factories/users.rb
FactoryBot.define do
  factory :user do
    name {"sample"}
    email {"sample@mail"}
    password {"sample777"}
  end
end

このように記述することで、テストで使用するユーザーの情報を事前に用意しておくことができます。

###Fakerとは
ランダムな値を生成するgemで,メールアドレス、人名、パスワードなどのランダムな値を生成してくれます。
RSpecと同様にGemfileのgroup :development, :testというグループの中に記述してからインストールします。

Gemfile
group :development, :test do
  gem 'faker '
end
ターミナル
$ bundle install

Fakerはこんな感じでランダムな値を生成します。

spec/factories/users.rb
FactoryBot.define do
  factory :user do
    name { Faker::Name.initials(number: 5) }
    email { Faker::Internet.free_email }
    password { Faker::Internet.password(min_length: 6) }
  end
end

FactoryBotとFakerでできること

テストコードを実行するたびにランダムな値でインスタンスを生成することができます。
テストをするアプリにユーザー管理機能がある場合、emailなどのカラムをテーブルに用意されていると思いますが、複数のテストを行う際に、「すでにemailの重複したインスタンスが存在する」といったような意図しない形でテストエラーが出てしまうことを防ぐのに役立ちます。

今回はここまでで、次の記事でRSpecを使った単体テストについて取り上げたいと思います。

RSpecのシリーズ記事

第1回:RSpecの導入&関係の深いgemについて ※この記事
第2回:RSpec:モデルの単体テストの記述例

##参考資料
RSpecの公式GitHub
FactoryBot(factory_bot_rails)の公式GitHub
Fakerの公式GitHub

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?