Yanonoblog!

こつこつと

FactoryBotのデータ生成に関する疑問を調べた

はじめに

プロジェクトが大きくなってくるにつれてテストの実行時間を最適化することも開発において重要です。

FactoryBotで実運用に近いパターンをすべて処理すると重くなりがちなので解決策を考える上での疑問をまとめています。

FactoryBot

FactoryBotはテストデータを簡単に作成するためのライブラリで、テストの準備段階で用いられることが一般的。

テスト中に生成するテストデータを定義することができます。

FactoryBotで定義したデータはどのタイミングで生成されるのか

FactoryBotの定義があるだけではデータは生成されず、createbuildなどのメソッドを使って明示的に生成する必要があります。(テスト実行時に毎回すべて生成されるわけではない)

letを使用してFactoryBotのインスタンスを定義した場合、そのletが初めて呼び出されたときにデータが生成されます。

FactoryBotのデータ生成は時間がかかるのか

FactoryBotを使用してテストデータを生成する際の時間は、データの複雑さ、データベースのパフォーマンス、生成するデータの量などによります。

特定のFactoryBotのデータ生成のみを行うことができるのか

タグ機能を使って、その中でletを使って呼び出せば良いです。

# spec/models/person_spec.rb

RSpec.describe Person, type: :model do
  describe "担当者Aのテスト", :tag_name do
    let(:person) { create(:person) }

    it "担当者Aの名前が正しいこと" do
      expect(person.name).to eq "担当者A"
    end
  end

  describe "担当者Bのテスト", :tag_name do
    let(:role) { create(:person, :b_person) }

    it "担当者Bのテストの名前が正しいこと" do
      expect(person.name).to eq "担当者Bのテスト"
    end
  end

おしまい

コメント

本記事の内容は以上になります!


プログラミングスクールのご紹介 (卒業生より)

お世話になったプログラミングスクールであるRUNTEQです♪

https://runteq.jp/r/ohtFwbjW

こちらのリンクを経由すると1万円引きになります。

RUNTEQを通じて開発学習の末、受託開発企業をご紹介いただき、現在も双方とご縁があります。

もし、興味がありましたらお気軽にコメントか、TwitterのDMでお声掛けください。

https://twitter.com/outputky