I've already looked here and here. I'm loading factory_girl_rails
fine.
I figured it must be a syntax error, but after an hour of head scratching, really haven't been able to fix it. Can someone please help? :)
Here is my factory:
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
And here is the relevant spec:
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
And this is the error I'm getting from running the spec:
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)>'
Traits should be inside factories. In your code, :user
factory and :with_teams
trait are not related.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With