thoughtbot / factory_bot

A library for setting up Ruby objects as test data.
https://thoughtbot.com
MIT License
7.91k stars 2.6k forks source link

How do you do inline association attribute overrides when your association doesnt match the factory name? #1591

Open v2kovac opened 1 year ago

v2kovac commented 1 year ago

The docs here use the worst example where the association happens to match the factory: https://github.com/thoughtbot/factory_bot/blob/main/GETTING_STARTED.md#overriding-attributes

factory :post do
  # ...
  author_last_name { "Writely" }
  author { association :author, last_name: author_last_name }
end

What if "author" is called "previous_author" on the model, I've tried every variation of explicitly specify the factory and it doesn't work.

eg: previous_author factory: :author { ... } doesn't work, previous_author { ... factory: :author } doesn't work etc. Is this just not possible?

v2kovac commented 1 year ago

author { association :previous_author, factory: :author }, doesn't work either btw because it says "previous_author" key not found lol, not to mention if you have more than one author (previous_author and new_author) you cant have author and author specified twice.

ellnix commented 11 months ago

I am assuming from your comments that your models have this structure:

class Author < ApplicationRecord
end
class Post < ApplicationRecord
  belongs_to :previous_author, class_name: 'Author' # ...
end

In that case I believe

factory :post do
   author_last_name { "Writely" }
   previous_author { association :author, last_name: author_last_name }
end

ought to work.