LoginSignup
3
3

More than 3 years have passed since last update.

モデル単体テスト内で、Fakerを使ってランダムな値を生成できるように上書きをする方法

Posted at

はじめに

 FakerはFactoryBotでのみ使えるものだと勝手に思っていたけど、RSpecでモデルの単体テストコードを記述するファイルでも使うことができることに気づき、新たに学んだことを記録しておきます。

Faker

 数字をランダムに生成する記述。

基本的な使い方としては、

Faker::Number.between(from: 5, to: 11) #5以上11以下をランダム生成

条件を減らすこともできます。

Faker::Number.between(from: 11) #11以上をランダム生成

betweenってあるけど、to:を付けなければ、最高値を設けずに値を生成できる。
逆に、

Faker::Number.between(to: 11) #11以下をランダム生成

from:to:にすれば、最高値のみを設けて値を生成できる。

具体的な使い方

目的

学年を入力する欄で8以上が入力出来ないようになっているかを確認するコードです。

テストコード

before do
  @class_room = FactoryBot.build(:class_room)
end
it '学年が8以上では登録できないこと' do
  @class_room.grade = Faker::Number.between(from: 8) #確かめたい部分を上書き
  @class_room.valid?
  expect(@class_room.errors.full_messages).to include("学年は一覧にありません")
end

最後に

 Railsが便利にRubyを使えるようにしてくれているから、「なぜそうなるのか」ブラックボックスになっていることがたくさんあることに日々気づかされるばかりです。今回でいうと、FakerはFactoryBot内だけだと、思い込んでしました。

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