Description of problem: - I\'ve setup factory_girl_rails however whenever I try and load a factory it\'s trying to load it multiple times.
Envir
I just found I was getting this answer when accidentally calling cucumber features. When I just called cucumber, the problem went away.
Check that you don't have multiple factories with same name this is one of reasons which causes error
Attempting to define multiple factories with the same name will raise an error.
The gem factory_girl_rails should be required in the spec_helper.rb rather than the gemfile - it is possible that you are requiring FactoryGirl twice which is why you are getting the duplicate.
Try this in your gem file:
group :test do
gem "rspec"
gem 'factory_girl_rails', :require => false
end
Then make sure that factory girl is required in the spec_helper with:
require 'factory_girl_rails'
By the way - you don't need both rspec and rpsec-rails in your gemfile. You can replace both with the following:
group :development, :test do
gem 'rspec-rails'
end
You need rspec in both groups so that the rake tasks will work in development and the core testing will work in test.
I had the same problem, it turned out there was a default users.rb created inside the test/factories which was created by the rails g command. This file was causing the conflict. The error went away when I deleted the file.
Replace the refinerycms-testing gem with rspec-rails and factory_girl_rails
I solved this because I was trying to create two factories. My feature spec included the line:
let!(:user) { create(:user) }
And then I used a sign_up(user) helper method:
def sign_up(user)
visit '/users/sign_up'
fill_in 'Email', with: user.email
fill_in 'Password', with: user.password
fill_in 'Password confirmation', with: user.password_confirmation
click_button 'Sign up'
end
Back to my feature spec, I called:
context 'logging out' do
before do
sign_up(user)
end
...
thus effectively trying to sign up a User that was already being created by the factory.
I altered the sign_up(user) to sign_in(user), and the helper to:
def sign_in(user)
visit '/users/sign_in'
fill_in 'Email', with: user.email
fill_in 'Password', with: user.password
click_button 'Log in'
end
now the user argument creates the User in the db due to the let! block and the sign_up(user) logs them in.
Hope this helps someone!
oh! and I also had to comment out:
Dir[Rails.root.join('spec/factories/**/*.rb')].each { |f| require f }
as a lot of the other answers suggest.