10.1 RspecとFactoryBot
Rspecを導入する
Rspec
は、RubyやRubynon Railsで作ったクラスやメソッドをテストするためのフレームワークです。
Rspec
はgemとして公開されているので以下のようにGemfile
に追加します。
group :development, :test do
gem 'rspec-rails'
end
gemをインストール
$ bundle install
次に以下のコマンドでRspec
がインストールされます。
$ bin/rails generate rspec:install
Running via Spring preloader in process 6819
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
FactoryBotを導入する
FactoryBot
はサンプルデータを作成するためのgemです。
FactoryBot
もgemとして公開されているので以下のようにGemfile
に追加します。
group :development, :test do
gem 'rspec-rails'
gem 'factory_bot_rails'
end
gemをインストール
$ bundle install
以上でFactoryBot
の導入は完了しました。
テスト用のデータを準備する
FactoryBot
を使ってテストデータを用意していきます。
以下の例ではユーザのテストデータを定義しています。
sequence
を利用することによって連番のデータを作成することができます。ブロック変数のn
には連番のデータが入っています。
spec/factories/users.rb
FactoryBot.define do
factory :user do
sequence(:email) { |n| "user#{n}@256.tips" }
password '12345678'
end
end
定義しものを元に実際にデータを作成していきます。
create
メソッドで作成されるデータはDBに保存されます。build
メソッドで作成されるデータはDBに保存されずインスタンスのみが返されます。
@user = FactoryBot.create(:user) #<User id: 1, email: "[email protected]", password: "12345678", created_at: "2018-07-19 08:25:30", updated_at: "2018-07-19 08:25:30">
@user = FactoryBot.build(:user) #<User id: nil, email: "[email protected]", password: "12345678", created_at: nil, updated_at: nil>