我正在尝试为我的模型课程做一个简单的测试,我写了这个工厂:
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
有什么想法吗?
这是我的Gem Envioronment:
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/ruby-1.9.3-p0@global 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/ruby-1.9.3-p0@global/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
解决方法
你试图删除这一行吗?
FactoryGirl.find_definitions
我正在使用Factory Girl(带有factory_girl_rails宝石)&应该使用3.1项目并且不必显式加载定义.