2014-05-22 13 views
5

Ho installato Rspec con un'applicazione rails4 tuttavia i test stanno tornando:Utilizzando Factory Girl con Rspec

Failure/Error: user = Factory(:user) 
    NoMethodError: 
     undefined method `Factory' for #<RSpec::Core::ExampleGroup::Nested_4::Nested_1:0x007fa08c0d8a98> 

sembra che io sto tra cui factorygirl in modo non corretto. Ho provato un paio di varianti ma non riesco a farlo funzionare.

mio Spec Helper: file di

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 
require 'factory_girl_rails' 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } 


# Checks for pending migrations before tests are run. 
# If you are not using ActiveRecord, you can remove this line. 
ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration) 

RSpec.configure do |config| 
    # ## Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    # config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 

    # If true, the base class of anonymous controllers will be inferred 
    # automatically. This will be the default behavior in future versions of 
    # rspec-rails. 
    config.infer_base_class_for_anonymous_controllers = false 

    # Run specs in random order to surface order dependencies. If you find an 
    # order dependency and want to debug it, you can fix the order by providing 
    # the seed, which is printed after each run. 
    #  --seed 1234 
    config.order = "random" 
    config.include Capybara::DSL, :type => :request 
    config.include FactoryGirl::Syntax::Methods 
end 

gemma:

group :development, :test do 
    gem 'rspec-rails', '~> 2.0' 
    gem 'factory_girl_rails', :require => false # as per sugestion on SO. Without the require false also fails 
    gem "capybara" 
end 

mia spec:

require 'spec_helper' 

describe "Create Event" do 
    describe "Log in and create an event" do 
    it "Allows creation of individual events" do 
     user = Factory(:user) 
     visit "/" 
    end 
    end 
end 

e in /spec/factories/users.rb

FactoryGirl.define do 
    factory :user do |f| 
    f.email "[email protected]" 
    f.password "password" 
    end 
end 

Come posso andare con la ragazza della fabbrica?

risposta

4

Per creare un utente che utilizza factorygirl:

user = FactoryGirl.create(:user) 

Questo userà tutto definito in fabbrica per creare l'utente. È anche possibile sostituire qualsiasi valore o specificare valori aggiuntivi allo stesso tempo. Per esempio:

user = FactoryGirl.create(:user, username: 'username', email: '[email protected]) 

In alternativa è possibile utilizzare FactoryGirl.build(:user, ...) in cui si desidera fare uso della fabbrica per costruire un'istanza ma in realtà non lo si salva nel database.

+1

Ah, sì è così. Stavo seguendo il cast delle rotaie e, come i commenti sottolineano, la sintassi è cambiata un po '. grazie Graeme. http://railscasts.com/episodes/275-how-i-test?view=comments#comment_158161 – Will

5

Dato che avete incluso:

config.include FactoryGirl::Syntax::Methods 

nel blocco RSpec configurare, sto cercando di indovinare che la sintassi che stai cercando è:

user = create(:user) 

o:

user = build(:user) 
+0

Neat. Ho usato FactoryGirl da anni e non sapevo di questa nuova sintassi più breve. –

+0

Questo è bello. Non ci stavo provando, ma lo userò da ora. Grazie. (peccato non posso spuntare entrambe le risposte) – Will

+0

'user = build (: utente)' # restituisce un'istanza utente che non è stata salvata 'utente = crea (: utente)' # restituisce un'istanza utente salvata – FutoRicky

Problemi correlati