

`spec/factories/projects.rb`  
のtraitを参考にusers.rbでuserが作成されるたびに5件のプロジェクト作成されるように設定したいのですが、エラーが出力され上手く動作しないです。

[code]

    FactoryBot.define do
      factory :project do
        sequence(:name) { |n| "Test Project #{n}" }
        description "Sample project for testing purposes"
        due_on 1.week.from_now
        association :owner
      end
    
      # メモ付きのプロジェクト
      trait :with_notes do
        after(:create) { |project| create_list(:note, 5, project: project) }
      end
    
[/code]

`spec/factories/users.rb`

[code]

    FactoryBot.define do
      factory :user, aliases: [:owner] do
        first_name  "Aaron"
        last_name  "Summer"
        sequence(:email) { |n| "tester#{n}@example.com" }
        password   "dottler-nouveau-pavilion-tights-furze"
      end
    
      # これが上手く動作しない
      trait :with_projects do
        after(:create) { |user| create_list(:project, 5, user: user) }
      end
    end
    
[/code]

`spec/models/user_spec.rb`

[code]

    require 'rails_helper'
    
    describe User do
      # テストに失敗する
      it "can have many projects" do
        user = FactoryBot.create(:user, :with_projects)
        expect(user.projects.length).to eq 5
      end
    end
    
[/code]

エラー内容

[code]

    Failure/Error: after(:create) { |user| create_list(:project, 5, user: user) }
         
         NoMethodError:
           undefined method `user=' for #<Project:0x0000560f854226e8>
           Did you mean?  user_id=
    
[/code]

詳しい方見て頂けないでしょうか？宜しくお願い致します。


CC BY-SA 4.0
2021-11-21T14:37:49.137
83749
2023-10-14T14:02:40.270
2021-11-22T03:37:57.757
22565
22565
question
ruby-on-rails ruby rspec
rspecでfactorybotのcreate_listを使用したテストが通らない

[code]

    factory :user, aliases: [:owner] do
      # ~~~
      trait :with_projects do
        after(:create) { |user| create_list(:project, 5, user: user) }
      end
    end
    
[/code]

とfactory do endの中に入れるとよさそうです


CC BY-SA 4.0
2021-11-22T03:25:49.150
83756
2021-11-22T03:25:49.150
49177
83749
answer


修正前

[code]

        after(:create) { |user| create_list(:project, 5, user: user) }
      end
    
[/code]

修正後、上手く動作した。  
projectのモデルは `owner` で関連付けられているから `owner` を使用する必要があった。

[code]

        after(:create) { |user| create_list(:project, 5, owner: user) }
      end
    
[/code]

指定する値を間違えていた。


CC BY-SA 4.0
2021-11-22T06:59:48.057
83764
2021-11-22T07:09:59.783
2021-11-22T07:09:59.783
22565
22565
83749
answer