2013-06-26 5 views
24

मैं आरएसपीसी के साथ एक मॉडल का परीक्षण करना चाहता हूं लेकिन शायद मैं एक टाइपो पर ठोकर खा रहा हूं जिसे मैं नहीं ढूंढ सकता। क्या कोई मेरी मदद कर सकता है? मैं लंबे समय से इसके साथ संघर्ष कर रहा हूं और मुझे कोई गलती नहीं मिल रही है। आपका अग्रिम में ही बहुत धन्यवाद!फैक्टरी पंजीकृत नहीं है

user_spec.rb

require 'spec_helper' 

describe User do 
    it "has a valid factory" do 
     FactoryGirl.build(:user).should be_valid 
    end 
    it "is invalid without an e-mail" 
    it "is invalid without a correct e-mail" 
    it "is invalid without a password" 
    it "is invalid without a matching password confrimation" 
end 

user.rb

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

spec_helper.rb

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

# 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 

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

त्रुटि

Factory not registered: user 
+1

http://stackoverflow.com/questions/4303329/rspec-cant-find-factorys-from-factorygirl देखें। मुझे लगता है कि आपको factory_girl_rails मणि की जरूरत है। –

+0

मेरे पास पहले से ही है। मणि सूची | grep rspec * आउटपुट rspec-rails (2.13.2) – Kert

+0

factory_girl_rails rspec_rails से अलग है –

उत्तर

30

आपके प्रश्न के मुताबिक, गलत फाइल में आपकी फैक्टरी परिभाषा है, यह user.rb में है। यह आपका परीक्षण फ़ोल्डर (कल्पना) यदि आप इस के लिए ऊपर rspec

# user.rb 

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

बदलें का उपयोग में एक factories.rb में होने की जरूरत है, (इसके अलावा, आप च चर की जरूरत नहीं है)

# spec/factories.rb 

FactoryGirl.define do 
    factory :user do 
     email "[email protected]" 
     password "ruby" 
     password_confrimation "ruby" 
    end 
end 

के रूप में भी टिप्पणियां कहते हैं, सिर्फ gem 'factory_girl'

+0

मैं कारखानों के बारे में स्पष्ट रूप से गलत था। आरबी नामकरण, कम से कम परीक्षण के आधार पर मैंने अभी किया था। यदि आप अपने उत्तर में मामूली संपादन करेंगे, तो मैं अपना डाउनवोट हटा दूंगा। उसके लिए माफ़ करना। शपथ ले सकते थे .... –

+4

परिभाषा 'spec/factories/user.rb' में जा सकती है और ठीक काम करती है। अगर आप अपनी फैक्ट्री परिभाषाओं को विभाजित करने में सक्षम नहीं थे तो 'spec/factories.rb' फ़ाइल वास्तव में समय के साथ फूला हो सकती है। –

+0

@ पॉलफोरवंती सहमत हैं। सादगी के लिए, क्योंकि कोई संकेत 'उपयोगकर्ता नहीं था।आरबी' 'spec' फ़ोल्डर के पास कहीं भी था, मैंने अभी 'factories.rb' का सुझाव दिया क्योंकि मैंने सोचा था कि यह समझना सबसे आसान होगा। – fontno

0

मैं अपने फ़ोल्डर कारखानों में संरचना के साथ निम्न समस्या में चलाने की थी के बजाय, सुनिश्चित करें कि gem 'factory_girl_rails' अपने Gemfile में है/ - factories/ -- artists.rb -- techniques.rb

artists.rb

FactoryBot.define do 
    factory :artist do 
     name  'Michael' 
     technique FactoryBot.create :technique 
    end 
    end 

techniques.rb

FactoryBot.define do 
    factory :technique do 
    name 'Some name' 
    end 
end 

तो यह लोड हो रहा है तकनीक वस्तु से पहले कलाकार लोड किया गया था। तो यह इसे नहीं मिला। समाधान कारखानों में नेस्टेड फैक्ट्रीबॉट का निर्माण नहीं करना है या अपने नेस्टेड फैक्ट्रियों का नाम अपने माता-पिता कारखाने से पहले खड़ा करना है।

मैंने अभी अपनी तकनीक फैक्ट्री को स्थानांतरित कर दिया है। factories.rb पर और इसे वहां परिभाषित किया गया। और मुद्दा हल हो गया था।

संबंधित मुद्दे