Spork 테스트 서버에 문제가 있습니다.rspec, factory_girl 및 datamapper의 spork 및 cache_classes 문제
config/environments/test.rb에서 config.cache_classes = false로 설정하면 specs가 오류를 시작합니다.
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이있을 때 = true로 '모든 것이 잘 작동하지만, 그것은 나에게 모델, 컨트롤러 클래스를 다시로드하지, 그래서 돈 이 경우에는 spork을 사용할 지점을 확인하십시오.
나는 캐시에 해당하는 경우,이 같은 것을 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'입니까? 또는 원래 질문의 each_run 예제와 함께 필요한 것입니까? –
왜 그런지 모르겠지만 갑자기이 일을 시작한 프로젝트가 명백한 이유가 없습니다. 나는 Spork.each_run에 Dependencies.clear를 넣는 것을 끝내었고 그것은 나를 위해 일했습니다. 내 Rspec.config는 each_run에 없지만 FactoryGirl.reload와 ActiveSupport :: Dependencies.clear 만 있습니다. 희망이 도움이됩니다. –
ActiveSupport :: Dependencies.clear가 prefork의 끝에서 추가되어야 함 (each_run이 아님) – Ran