2012-01-03 12 views
7

मैं अपने मॉडल Course के लिए एक साधारण परीक्षण करने के लिए कोशिश कर रहा हूँ, मैं इस कारखाने ने लिखा है:फैक्टरीगर्ल, मैं पहले से ही पंजीकृत या अनियमित स्थिर क्यों हो रहा हूं?

FactoryGirl.define do 
    factory :course do 
    name 'How to be happy ?' 
    end 
end 

course_spec.rb:

require "rspec" 
require 'factory_girl_rails' 
describe "When a course is created" do 

    it "can't be deleted if any student is enrolled to it" do 
    FactoryGirl.find_definitions 
    course = FactoryGirl.build(:course) 

    student= Student.create! 
    course.students << student 
    course.destroy 
    course.name.should !=nil 
    end 
end 

लेकिन, मैं इस सीमा तक पहुंच जाती

course = FactoryGirl.build(:course) 

मुझे त्रुटि मिलती है:

FactoryGirl::DuplicateDefinitionError: Factory already registered: course 

अगर मैं टिप्पणी: कारखाने में पाठ्यक्रम परिभाषा, मैं मिलता है:

NameError: uninitialized constant Course 

किसी भी विचार कृपया?

RubyGems Environment: 
RUBYGEMS VERSION: 1.8.10 
RUBY VERSION: 1.9.3 (2011-10-30 patchlevel 0) [i686-linux] 
INSTALLATION DIRECTORY: /home/sam/.rvm/gems/ruby-1.9.3-p0 
RUBY EXECUTABLE: /home/sam/.rvm/rubies/ruby-1.9.3-p0/bin/ruby 
EXECUTABLE DIRECTORY: /home/sam/.rvm/gems/ruby-1.9.3-p0/bin 
RUBYGEMS PLATFORMS: 
    ruby 
    x86-linux 
GEM PATHS: 
    /home/sam/.rvm/gems/ruby-1.9.3-p0 
    /home/sam/.rvm/gems/[email protected] 
GEM CONFIGURATION: 
    :update_sources => true 
    :verbose => true 
    :benchmark => false 
    :backtrace => false 
    :bulk_threshold => 1000 
REMOTE SOURCES: 
    http://rubygems.org/ 
---------------------- 
IDE: JetBrains RubyMine (EAP) RM-112.291, build #RM-112.291 
OS: Linux 3.0.0-12-generic[i386] 
Java: 1.6.0_23-b23 
RubyMine SDK Environment: 
Sdk: RVM: ruby-1.9.3-p0 
Sdk Version: ver.1.9.3p0 (revision 33570) p0 
Ruby Interpreter: /home/sam/.rvm/rubies/ruby-1.9.3-p0/bin/ruby 
RVM Sdk: yes, gemset:[default] 
RVM Home: /home/sam/.rvm 
Sdk Language Level: 1.9 
Sdk Load Path: 
    /home/sam/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1 
    /home/sam/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/i686-linux 
    /home/sam/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby 
    /home/sam/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/vendor_ruby/1.9.1 
    /home/sam/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/vendor_ruby/1.9.1/i686-linux 
    /home/sam/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/vendor_ruby 
    /home/sam/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1 
    /home/sam/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/i686-linux 
    /home/sam/rubyMine4beta/rubystubs19 
Sdk Gem paths: 
    file:///home/sam/.rvm/gems/ruby-1.9.3-p0/bundler/gems 
    file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems 
    file:///home/sam/.rvm/gems/[email protected]/gems 
Gems used for 'hope': 
    ffi (1.0.11, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/ffi-1.0.11) 
    sass (3.1.12, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/sass-3.1.12) 
    coffee-script-source (1.2.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/coffee-script-source-1.2.0) 
    mail (2.3.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/mail-2.3.0) 
    activesupport (3.1.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/activesupport-3.1.0) 
    i18n (0.6.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/i18n-0.6.0) 
    uglifier (1.2.1, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/uglifier-1.2.1) 
    sprockets (2.0.3, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/sprockets-2.0.3) 
    foreigner (1.1.1, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/foreigner-1.1.1) 
    treetop (1.4.10, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/treetop-1.4.10) 
    haml (3.1.4, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/haml-3.1.4) 
    ansi (1.4.1, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/ansi-1.4.1) 
    mime-types (1.17.2, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/mime-types-1.17.2) 
    rack (1.3.6, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.6) 
    devise (1.5.2, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/devise-1.5.2) 
    warden (1.1.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/warden-1.1.0) 
    diff-lcs (1.1.3, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/diff-lcs-1.1.3) 
    activeresource (3.1.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/activeresource-3.1.0) 
    sass-rails (3.1.5, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/sass-rails-3.1.5) 
    therubyracer (0.9.9, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/therubyracer-0.9.9) 
    rspec-expectations (2.7.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rspec-expectations-2.7.0) 
    coffee-rails (3.1.1, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/coffee-rails-3.1.1) 
    activemodel (3.1.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/activemodel-3.1.0) 
    simple_form (1.5.2, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/simple_form-1.5.2) 
    bundler (1.0.21, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/bundler-1.0.21) 
    thor (0.14.6, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/thor-0.14.6) 
    activerecord (3.1.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.0) 
    json (1.6.4, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/json-1.6.4) 
    coffee-script (2.2.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/coffee-script-2.2.0) 
    execjs (1.2.13, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/execjs-1.2.13) 
    turn (0.8.3, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/turn-0.8.3) 
    rake (0.9.2.2, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rake-0.9.2.2) 
    kaminari (0.13.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/kaminari-0.13.0) 
    rdoc (3.12, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rdoc-3.12) 
    rspec (2.7.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rspec-2.7.0) 
    actionpack (3.1.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/actionpack-3.1.0) 
    rspec-rails (2.7.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rspec-rails-2.7.0) 
    guard (0.10.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/guard-0.10.0) 
    cocoon (1.0.15, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/cocoon-1.0.15) 
    libv8 (3.3.10.4, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/libv8-3.3.10.4-x86-linux) 
    rspec-core (2.7.1, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rspec-core-2.7.1) 
    jquery-rails (1.0.19, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/jquery-rails-1.0.19) 
    rails (3.1.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rails-3.1.0) 
    rack-ssl (1.3.2, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rack-ssl-1.3.2) 
    arel (2.2.1, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/arel-2.2.1) 
    erubis (2.7.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/erubis-2.7.0) 
    rb-fsevent (0.4.3.1, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rb-fsevent-0.4.3.1) 
    builder (3.0.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/builder-3.0.0) 
    orm_adapter (0.0.5, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/orm_adapter-0.0.5) 
    rack-cache (1.0.3, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rack-cache-1.0.3) 
    multi_json (1.0.4, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/multi_json-1.0.4) 
    spork (0.9.0.rc9, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/spork-0.9.0.rc9) 
    tilt (1.3.3, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/tilt-1.3.3) 
    rack-mount (0.8.3, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rack-mount-0.8.3) 
    tzinfo (0.3.31, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/tzinfo-0.3.31) 
    validate_url (0.2.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/validate_url-0.2.0) 
    sqlite3 (1.3.5, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/sqlite3-1.3.5) 
    rspec-mocks (2.7.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rspec-mocks-2.7.0) 
    polyglot (0.3.3, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/polyglot-0.3.3) 
    railties (3.1.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.1.0) 
    hike (1.2.1, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/hike-1.2.1) 
    guard-spork (0.5.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/guard-spork-0.5.0) 
    factory_girl_rails (1.4.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/factory_girl_rails-1.4.0) 
    factory_girl (2.3.2, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/factory_girl-2.3.2) 
    will_paginate (3.0.2, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/will_paginate-3.0.2) 
    rack-test (0.6.1, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/rack-test-0.6.1) 
    client_side_validations (3.1.4, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/client_side_validations-3.1.4) 
    actionmailer (3.1.0, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.1.0) 
    bcrypt-ruby (3.0.1, file:///home/sam/.rvm/gems/ruby-1.9.3-p0/gems/bcrypt-ruby-3.0.1) 

संपादित

spec_helper.rb फ़ाइल:

require 'rubygems' 
require 'spork' 




    Spork.prefork do 
     # Loading more in this block will cause your tests to run faster. However, 
     # if you change any configuration or code from libraries loaded here, you'll 
     # need to restart spork for it take effect. 
     ENV["RAILS_ENV"] ||= 'test' 
     require File.expand_path("../../config/environment", __FILE__) 
     require 'rspec/rails' 
     require 'rspec/autorun' 

     # 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} 

     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 
     config.mock_with :rspec 

     # 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 
     end 





    end 

    Spork.each_run do 
     # This code will be run each time you run your specs. 
     FactoryGirl.factories.clear 
     # either this if you have multiple files under 'spec/factories', 
     # or just load the single file, such as 'spec/factories.rb' 
     Dir.glob("#{::Rails.root}/spec/factories/*.rb").each do |file| 
     load "#{file}" 
     end 

    end 
+0

आप एक कोर्स है जोड़ने है मॉडल अभी तक परिभाषित किया गया? –

+0

हां, पाठ्यक्रम ऐप मॉडल में परिभाषित किया गया है, माइग्रेट किया गया है और इसके लिए एक तालिका है – simo

+0

कृपया इस "अनियमित स्थिर" त्रुटि के बारे में अधिक जानकारी दिखाएं। वास्तव में इसके बिना इसे डीबग करना वाकई मुश्किल है। –

उत्तर

18

आप इस लाइन को हटाने के लिए प्रयास किया था

यहाँ

मेरी रत्न Envioronment है?

FactoryGirl.find_definitions 

मैं फैक्टरी गर्ल (factory_girl_rails मणि के साथ) & चाहिये उपयोग कर रहा हूँ एक 3.1 परियोजना के साथ और स्पष्ट रूप से परिभाषाओं लोड करने के लिए नहीं था।

+0

मैंने फैक्टरीगर्ल.फिंड_डेफिनिशन को दो फाइलों से हटा दिया: पहले: /home/sam/.rvm/gems/ruby-1.9.3-p0/gems/factory_girl_rails-1.4.0/lib/factory_girl_rails/railtie.rb और यह काम करता है ! दूसरा: /home/sam/Documents/RoR/course_builder/spec/models/course_spec.rb और यह ठीक काम करता है! – simo

+0

5 साल बाद - यह मेरी मदद की – Mark

4

आपको केवल require 'rspec_factory_girl' और फिर परिभाषाओं को करने की आवश्यकता है।

आम तौर पर यदि आप इसे spec_helper.rb में डाल दिया, यह spec/ निर्देशिका, यदि आप अपने कारखानों spec/factories.rb में उदाहरण के लिए परिभाषित किया गया है, वे स्वचालित रूप से लोड हो जाएगा जिसका मतलब है कि में सभी फ़ाइलों की आवश्यकता होगी।

हालांकि आपको अपनी स्पेक फ़ाइल के शीर्ष पर require 'spec_helper' जोड़ने की आवश्यकता है, ऐसा लगता है कि आप ऐसा नहीं कर रहे हैं।

यदि आप इस तरह से spec_helper.rb फ़ाइल का उपयोग नहीं करना चाहते हैं, तो बस require 'factories' जैसी परिभाषा की आवश्यकता है।

एक छोटी सी चाल आप spork की तरह कुछ का उपयोग कर और प्रत्येक रन

FactoryGirl.factories.clear 
# either this if you have multiple files under 'spec/factories', 
# or just load the single file, such as 'spec/factories.rb' 
Dir.glob("#{::Rails.root}/spec/factories/*.rb").each do |file| 
    load "#{file}" 
end 

संपादित करने से पहले मैन्युअल रूप से अपने कारखानों को फिर से लोड करने की आवश्यकता कर रहे हैं: Spork

की पूर्ण उदाहरण
Spork.each_run do 
    require 'factory_girl_rails' 

    # reload all the models 
    Dir["#{Rails.root}/app/models/**/*.rb"].each do |model| 
    load model 
    end 

    # reload all factories 
    FactoryGirl.factories.clear 
    Dir.glob("#{::Rails.root}/spec/factories/*.rb").each do |file| 
    load "#{file}" 
    end 

    # reload routes 
    YourAppName::Application.reload_routes! 
end 
+0

जब मैं spork शुरुआत में ऊपर अपने कोड डाल, मैं इस त्रुटि मिलती है: का उपयोग RSpec प्रीलोड रेल पर्यावरण लोड हो रहा है Spork.prefork ब्लॉक ... फैक्टरी पहले से ही पंजीकृत: कोर्स (फैक्टरीगर्ल :: डुप्लिकेट डीफिनिशन एरर) मुझे आश्चर्य है कि कारखाना पंजीकृत है? मैंने आपको spec_helper.rb दिखाने के लिए प्रश्न में एक संपादन जोड़ा है। – simo

+0

@ सैमिरसाबरी आप कारखाने की लड़की कहां लोड कर रहे हैं? यह मेरे लिए काम करता है जब मैं इसे प्रत्येक_रुन ब्लॉक में लोड करता हूं, तो संपूर्ण फ़ाइल के लिए संपादन देखें। –

+2

ठीक काम करता है, लेकिन मुझे कारखानों के अलावा ** FactoryGirl.sequences.clear ** जोड़ने की आवश्यकता है। स्पष्ट रूप से, अन्यथा मुझे अपने कस्टम अनुक्रमों (मेल-एड्रेस इत्यादि) के लिए डबलडिफिनिशन त्रुटि मिली है। – stwienert

0

में मेरी मामला, ऐसा हुआ जब मैंने गलती से दो फैक्ट्री फाइलें रखीं जिनमें निम्न कुंजी शामिल है:

Rails.root/spec/factories/book.rb 
Rails.root/spec/factories/books.rb 

यह स्पष्ट है, लेकिन यह स्थिति तब हुई जब मैंने नो-गिट पर्यावरण (!) के तहत विकसित किया और स्रोत फ़ाइलों को rsync (1) द्वारा रखा। जब मैं अपने स्थानीय पीसी और rsync से books.rb करने के लिए डेव-env को book.rb नाम बदलने, दोनों book.rb और books.rb मौजूद हैं और इस स्थिति यहाँ ;-(

1

मैं भी इस त्रुटि का सामना कारण:

FactoryGirl::DuplicateDefinitionError: Factory already registered: factory_name 

और मैं इस तरह मेरी Gemfile में :require => false जोड़कर समस्या का समाधान हो:

0123:

gem 'factory_girl_rails', :require => false 

तो इस लाइन होने से केवल एक बार test_helper.rb में यह आवश्यकता होती है

1

यहाँ रेल 4.2.6

rails_helper.rb में मेरे लिए काम किया इन librarys

require 'factory_girl' 
require 'factory_girl_rails' 

config हिस्सा करने के लिए इन जोड़े

config.include FactoryGirl::Syntax::Methods 
संबंधित मुद्दे