मुझे स्पार्क परीक्षण सर्वर में कोई समस्या है।rspec, factory_girl और डेटामैपर के साथ स्पार्क और कैश_क्लास समस्या
यदि मैं config.cache_classes = config/वातावरण/test.rb में गलत सेट करता हूं तो चश्मा rasie त्रुटियों से शुरू होता है।
Failure/Error: task = Factory(:something, :foo => @foo, :bar => @bar)
DataMapper::ImmutableError:
Immutable resource cannot be modified
यह मेरा spec_helper.rb है:
require 'spork'
Spork.prefork do
if ENV['CODE_COVERAGE'] == '1'
require 'simplecov'
SimpleCov.start 'rails'
end
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'webmock/rspec'
require 'factory_girl'
Dir[Rails.root.join("spec/controllers/shared/*.rb")].each { |f| require f }
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
RSpec.configure do |config|
config.mock_with :mocha
config.include Rails.application.routes.url_helpers
config.include UrlHelper
config.before(:each) do
repository(:default) do
transaction = DataMapper::Transaction.new(repository)
transaction.begin
repository.adapter.push_transaction(transaction)
end
end
config.after(:each) do
repository(:default).adapter.pop_transaction.try(:rollback)
end
end
end
# This code will be run each time you run your specs.
Spork.each_run do
# reload factories
Factory.definition_file_paths = Dir[File.join(Rails.root, "spec", "factories")]
Factory.find_definitions
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean
LoggedEvent.all.destroy!
end
जब मैं config.cache_classes है = सच है, तो सब कुछ अच्छी तरह से काम करता है, लेकिन यह मुझे एक मॉडल, नियंत्रकों कक्षाएं फिर से लोड नहीं है, इसलिए मैं डॉन ' इस मामले में स्पार्क का उपयोग करने में एक बिंदु नहीं देखते हैं।
मैं कुछ इस तरह spec_helper.rb, जब कैश सच है जोड़ने की कोशिश की:
Spork.each_run do
Dir.glob("#{Rails.root}/app/models/*.rb").sort.each { |file| load file }
end
लेकिन मैं इस समाधान पसंद नहीं है।
रुको, तो 'ActiveSupport :: Dependencies.clear' prefork या each_run में है? मैंने विरोधाभासी कहानियां देखी हैं। न तो मेरे लिए काम करना प्रतीत होता है, दोनों लोडिंग मुद्दों को जन्म देते हैं: "xxxx को परिभाषित करने के लिए अपेक्षित xxxx।" साथ ही, क्या यह अकेले 'ActiveSupport :: Dependencies.clear' है जो समस्या हल करती है? या क्या मूल प्रश्न में प्रत्येक_रुन उदाहरण के साथ संयोजन की आवश्यकता है? –
मुझे नहीं पता क्यों, लेकिन मेरी परियोजना ने अचानक ऐसा करने शुरू कर दिया, किसी स्पष्ट कारण के लिए। मैंने निर्भरता डाली। मेरे स्पार्क.एच_रुन में स्पष्ट, और यह मेरे लिए काम किया। मेरे पास प्रत्येक_रुन में मेरा RsPEc.config नहीं है, बस: FactoryGirl.reload और ActiveSupport :: Dependencies.clear। उम्मीद है की वो मदद करदे। –
ActiveSupport :: Dependencies.clear को prefork के अंत में जोड़ा जाना चाहिए, प्रत्येक_रुन – Ran