【RSpec】FactoryBotを使ってみよう【Rails】
Factory Botとは??
- テストのためのデータを簡単に作成できるライブラリ
-
Active Record
を使う
Factory Botのあれこれ
Active Record
を使うfactory_bot_rails
をインストールすると、下記のようなコマンドでfactory
を作成するためのファイルを作ることができます。
bin/rails g factory_bot:model task
少し解説します。
bin/rails g
までは大丈夫でしょう。factory_bot:model
でモデルに明示します。task
のように対象を指定してあげてください。
このコマンドを実行すると、spec/factories/tasks.rb
に以下のようなファイルが生成されると思います。
FactoryBot.define do
factory :task do
end
end
雛形ができましたね。この中にデータを定義していきましょう。
FactoryBot.define do
factory :task do
name "お買い物"
content "夕飯を買いに行く"
end
end
少ないかもしれませんが、まあ大丈夫でしょう。 テストファイル内でFactoryBot.create(:task)
と実行することで、spec/factories/tasks.rb
に記述した内容のデータを作成することができます。
FactoryBotを少しだけ使いこなす。
オーバーライドさせる
例えば、task
のname
がnil
だった時にエラーを出力させる異常系のテストを書きたい場合は、下記のように書けます。
# nameがなければ、無効。
it "is invalid without a name" do
task = FactoryBot.build(:task, name: nil)
task.valid?
expect(task.errors[:name]).to include("can't be blank")
end
プロパティを上書きしてnil
にすることで、期待通りの形にしています。
ユニークな値を扱う。
例えばメアドは唯一無二であるはずだし、そのような仕様であり、そのようなテストを書くべきです。しかし、FactoryBot
は常に同じ値を参照するので、そのような事象に対応できない場合があります。
この問題をは下記のようにシーケンスを使うことで解決できます。
FactoryBot.define do
factory :user do
name "山田"
sequence(:email) { |n| "test#{n}@example.com" }
end
end
このように定義することによって、[email protected]
、[email protected]
のように設定されます。
とても便利。
Author And Source
この問題について(【RSpec】FactoryBotを使ってみよう【Rails】), 我々は、より多くの情報をここで見つけました https://qiita.com/onikan/items/4a07900b521b4b406fae著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .