Rails5 の rspec で forgery を使ってみる
Ruby Ruby on Rails
Published: 2019-06-02

やったこと

Rails5 の rspec で forgery を使ってみます。

forgery はダミーデータを作成するのに使います。

名前、金額、日付など生成できます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

$ gem list | grep rspec-rails
rspec-rails (3.8.2)

調査

Gemfile に追加 + インストール

Gemfile

group :development, :test do
  ...
  gem 'forgery'
end
$ bundle install

rspec に記述 (FactoryBot)

今回データ作成に FactoryBot を使っているので、 こちらに forgery を導入してみます。

spec/factories/task.rb

FactoryBot.define do
  factory :task do
    name { Forgery(:name).first_name }
  end
end

spec/models/task3_spec.rb

require 'rails_helper'

RSpec.describe Task, type: :model do
  before do
    @task = build(:task)
  end

  it 'テスト1' do
    p @task.name
  end

  it 'テスト2' do
    p @task.name
  end

end

テスト実行

1回目

$ bundle exec rspec spec/models/task3_spec.rb -fd

Task
"Jason"
  テスト1
"Sean"
  テスト2

Finished in 0.01026 seconds (files took 0.9455 seconds to load)
2 examples, 0 failures

2回目

$ bundle exec rspec spec/models/task3_spec.rb -fd

Task
"Julie"
  テスト1
"Justin"
  テスト2

Finished in 0.01186 seconds (files took 0.91584 seconds to load)
2 examples, 0 failures

名前が生成されていることが分かります。

ただし、呼び出すために変わるので、データに依存するテストには利用できません。

とりあえずデータを埋めときたい時に利用するものみたいですね。

参考