2011-05-05 9 views
5

estoy recibiendo un error al intentar ejecutar mis pruebas en un proyecto Rails3, usando MongoDB y Mongoid:método no definido `use_transactional_fixtures =' en nuevos carriles 3 proyectos

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

Se trata de un nuevo proyecto que se ejecuta en 3.0.7. Mi archivo test_helper.rb es exactamente esto:

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

class ActiveSupport::TestCase 

    self.use_transactional_fixtures = true 

end 

¿Es esto un método de ActiveRecord solamente? No tengo este problema en otros proyectos de rieles que también usan ActiveSupport :: TestCase. Además, estoy usando Fabricator para generar mis datos de prueba, pero eso realmente no explicaría este error.

Respuesta

3

Así que aquí es el trato: use_transactional_filters es un método definido en /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 

Así que en realidad se trata de ActiveRecord específica. Como no estoy usando ActiveRecord en mi proyecto, esto no tiene ningún efecto, y tendré que buscar otra forma de limpiar mi base de datos entre ejecuciones de prueba.

+0

Tal vez ya han encontrado una solución de limpieza de base de datos ... pero esto funciona para Mongoid: https://github.com/bmabey/database_cleaner –

1

Aquí es una línea de truco que puede utilizar para colocar todas las tablas después de cada prueba:

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

O como JP señaló la joya más limpio de base de datos parece que funciona bien para esto: https://github.com/bmabey/database_cleaner

En mis pruebas, la gema database_cleaner fue aproximadamente un 4% más rápida, supongo que porque utiliza el truncamiento en lugar de eliminar las tablas. Aquí es un archivo de ejemplo que utiliza spec_helper.rb limpiador base de datos y 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 
Cuestiones relacionadas