2014-05-22 6 views
5

साथ मैं तथापि परीक्षण लौट रहे एक rails4 अनुप्रयोग के साथ Rspec की स्थापना की है का उपयोग करना:फैक्टरी लड़की Rspec

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

लगता है जैसे मैं FactoryGirl गलत तरीके से शामिल कर रहा हूँ। मैंने कुछ बदलावों की कोशिश की है लेकिन मैं इसे काम नहीं कर सकता।

मेरे युक्ति हेल्पर:

# 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 

मणि फ़ाइल:

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 

मेरी कल्पना:

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 

और /spec/factories/users.rb में

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

मैं कारखाने की लड़की के साथ कैसे जा सकता हूं?

उत्तर

4

FactoryGirl का उपयोग कर एक उपयोगकर्ता बनाने के लिए:

user = FactoryGirl.create(:user) 

इस उपयोगकर्ता बनाने के लिए सब कुछ आप कारखाने में परिभाषित का प्रयोग करेंगे। आप किसी भी मूल्य को ओवरराइड कर सकते हैं, या एक ही समय में अतिरिक्त मान निर्दिष्ट कर सकते हैं। उदाहरण के लिए:

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

वैकल्पिक रूप से आप FactoryGirl.build(:user, ...) का उपयोग जहां कारखाना एक उदाहरण के निर्माण के लिए का उपयोग करना चाहते हैं, लेकिन वास्तव में डेटाबेस के लिए यह नहीं बचा सकता है।

+1

आह, हाँ यह है। मैं रेल कास्ट का पालन कर रहा था और टिप्पणियों के अनुसार वाक्यविन्यास थोड़ा बदल गया है। धन्यवाद ग्रीम। http://railscasts.com/episodes/275-how-i-test?view=comments#comment_158161 – Will

5

यह देखते हुए कि आप में शामिल हैं:

config.include FactoryGirl::Syntax::Methods 

अपने RSpec कॉन्फ़िगर ब्लॉक में मेरा अनुमान है कि कि वाक्य रचना के लिए आप देख रहे हैं:

user = create(:user) 

या:

user = build(:user) 
+0

साफ। उम्र के लिए फैक्टरीगर्ल का उपयोग कर रहे थे और मुझे इस नए छोटे वाक्यविन्यास के बारे में पता नहीं था। –

+0

यह अच्छा है। मैं इसके लिए कोशिश नहीं कर रहा था लेकिन मैं इसे अब से उपयोग करूंगा। धन्यवाद। (शर्म की बात है कि मैं दोनों उत्तरों को टिक नहीं कर सकता) – Will

+0

'उपयोगकर्ता = निर्माण (: उपयोगकर्ता)' # एक उपयोगकर्ता उदाहरण देता है जो सहेजा नहीं गया है 'उपयोगकर्ता = बनाएं (: उपयोगकर्ता)' # एक सहेजा गया उपयोगकर्ता उदाहरण देता है – FutoRicky