29
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FactoryBot でbuildしたとき、関連先がcreateされなくなっていた(デフォルトの挙動として)

Last updated at Posted at 2019-02-14

上のイシューにある通り、FactoryBotで関連先を作るときの挙動が変更になっていたようです。

factory_bot, factory_bot_rails いずれも 5.0.0 以上。
仕事で(同僚が)ちょうどアップデートしようとしていたところ、テストが大量に失敗してたどり着きました。
手伝ったのでネタちょうだいと言ったらくれるとのこと。

レコードのIDが見当たらないとかのエラーでした(よく覚えてない)。

具体的な挙動

イシューからの例を拝借。

FactoryBot.define do
  factory :user do
    association :doggie
  end
end

このとき、

FactoryBot.build :user

のように build したとき、

  • 4.11 まで : 関連先の doggie を create する
  • 5.0.0 : 関連先の doggie を build する

どゆこと?

イシューからリンクがありましたが、公式のGetting Started

In factory_bot 5, associations default to using the same build strategy as their parent object
factory_bot 5では、関連先は親オブジェクトと同じbuildストラテジを利用するのがデフォルトです

前の挙動が良い場合

可能であれば失敗するテストをひとつずつ修正していくのが一番だとは思いますが、いろんな事情がありますよね。

さっきのトコ、少し下に

If you want to continue using the old behavior, you can set the use_parent_strategy configuration option to false.
前の挙動がよければ、 use_parent_strategy オプションを false に設定することもできます

FactoryBot.use_parent_strategy = false

これを失敗するテストの周辺なり spec/rails_helper.rb なりに書いておけば大丈夫なはずです。

29
12
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
29
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?