4

私はすでにここここを見てきました。正常にロードしてfactory_girl_railsいます。

構文エラーに違いないと思いましたが、1時間頭をかいた後、実際には修正できませんでした。誰か助けてもらえますか?:)

これが私の工場です:

require 'Faker'

FactoryGirl.define do

  factory :user do
    name { Faker::Name.name }
    email { Faker::Internet.email }
    password { Faker::Lorem.characters 12 }
  end

  trait :with_teams do
    ignore do
      number_of_teams 5
    end

    after :create do |user, evaluator|
      FactoryGirl.create_list :team, evaluator.number_of_teams, :user => user
    end
  end

end

そして、ここに関連する仕様があります:

require 'spec_helper'

describe User do
  # This works fine
  it "can create a team" do
    user = FactoryGirl.create :user
    team = user.teams.create

    team.class.should == Team
  end

  # The marked line throws argument error
  it "can have many teams" do
    user = FactoryGirl.create :user, :with_teams, :number_of_teams => 10 # <---
    user.teams.length.should == 10
  end
end

そして、これは私がスペックを実行することから得ているエラーです:

    Failures:

      1) User can have many teams
         Failure/Error: user = FactoryGirl.create :user, :with_teams, :number_of_teams => 10
         ArgumentError:
           Factory not registered: User
         # ./spec/factories/users.rb:19:in `block (3 levels) in <top (required)>'
         # ./spec/models/user_spec.rb:34:in `block (2 levels) in <top (required)>'
4

4 に答える 4

4
require 'factory_girl_rails'
FactoryGirl.factories.clear

これで問題が解決する場合があります。

于 2013-01-16T11:34:58.250 に答える
4

特性は工場内にある必要があります。コードでは、:userファクトリと:with_teamsトレイトは関連していません。

require 'Faker'

FactoryGirl.define do

  factory :user do
    name { Faker::Name.name }
    email { Faker::Internet.email }
    password { Faker::Lorem.characters 12 }

    trait :with_teams do
      ignore do
        number_of_teams 5
      end

      after :create do |user, evaluator|
        FactoryGirl.create_list :team, evaluator.number_of_teams, :user => user
      end
    end
  end
end
于 2013-01-16T11:48:01.157 に答える
1

私が見ている問題は、という名前のファクトリがないことですteams

require 'Faker'
FactoryGirl.define do

  factory :user do
  team
   #.... your code here
  end

  factory :team do
   #... more code here as necessary 
  end
end
于 2013-01-17T19:11:26.800 に答える
1

wintondeshongがここのコメントで述べているように、おそらく工場をリロードする必要がありますが、以前は、工場が存在するかどうかを確認できます。

FactoryGirl.factories.count
FactoryGirl.factories

それから

FactoryGirl.reload
于 2018-09-29T13:20:18.513 に答える