2011-05-05 13 views
5

मैं जब MongoDB और Mongoid का उपयोग कर एक Rails3 परियोजना में मेरी परीक्षण चलाने के लिए कोशिश कर रहा है, कोई त्रुटि हो रही है:अपरिभाषित विधि `use_transactional_fixtures = 'नई रेल में 3 परियोजना

undefined method `use_transactional_fixtures=' for ActiveSupport::TestCase:Class 

यह एक नया पर चल रहे प्रोजेक्ट है 3.0.7।

ENV["RAILS_ENV"] = "test" 
require File.expand_path('../../config/environment', __FILE__) 
require 'rails/test_help' 

class ActiveSupport::TestCase 

    self.use_transactional_fixtures = true 

end 

यह एक ActiveRecord एकमात्र तरीका है: मेरी test_helper.rb फ़ाइल वास्तव में यह क्या है? मुझे अन्य रेल परियोजनाओं में यह समस्या नहीं है जो ActiveSupport :: TestCase का भी उपयोग करता है। इसके अलावा, मैं अपने परीक्षण डेटा उत्पन्न करने के लिए फैब्रिकेटर का उपयोग कर रहा हूं, लेकिन यह वास्तव में इस त्रुटि को समझा नहीं जाएगा।

उत्तर

3

तो यहाँ सौदा है: use_transactional_filters एक विधि /rails/test_helper.rb

module ActiveRecord 
    module TestFixtures 
    extend ActiveSupport::Concern 

    included do 

     class_attribute :use_instantiated_fixtures # true, false, or :no_instances 
    end 
    end 
end 

में परिभाषित किया गया है तो वास्तव में यह ActiveRecord विशिष्ट है। चूंकि मैं अपने प्रोजेक्ट में ActiveRecord का उपयोग नहीं कर रहा हूं, इसका कोई प्रभाव नहीं पड़ता है, और मुझे टेस्ट रन के बीच अपना डेटाबेस साफ़ करने का एक और तरीका ढूंढना होगा।

+0

हो सकता है कि आप पहले से ही एक डेटाबेस सफाई समाधान पाया है का उपयोग करता है है ... लेकिन इस Mongoid के लिए काम करता है: https://github.com/bmabey/database_cleaner –

1

यहाँ एक एक पंक्ति हैक आप प्रत्येक परीक्षा के बाद सभी तालिकाओं ड्रॉप करने का उपयोग कर सकते है:

Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop) # transactional fixtures hack for mongo 

या जेपी के रूप में डाटाबेस क्लीनर मणि ने बताया इस के लिए अच्छी तरह से काम करने लगता है: https://github.com/bmabey/database_cleaner

मेरे परीक्षणों में डेटाबेस_क्लानेर मणि लगभग 4% तेज था, मैं अनुमान लगा रहा हूं क्योंकि यह टेबल को छोड़ने के बजाय छंटनी का उपयोग करता है। यहां एक नमूना spec_helper.rb फ़ाइल डेटाबेस क्लीनर और rspec

ENV["RAILS_ENV"] ||= 'test' 
    require File.expand_path("../../config/environment", __FILE__) 
    require 'rspec/rails' 
    require 'capybara/rspec' 

    require 'database_cleaner' 
    DatabaseCleaner.strategy = :truncation 

    # 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| 
    config.mock_with :mocha 

    config.before(:each) do 
     DatabaseCleaner.clean 
     #Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop) # transactional fixtures hack for mongo 
    end 
    end 
संबंधित मुद्दे