undefined метод `use_transactional_fixtures = 'в новом проекте Rails 3 - PullRequest
5 голосов
/ 06 мая 2011

Я получаю сообщение об ошибке при попытке запустить мои тесты в проекте Rails3, используя MongoDB и Mongoid:

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

Это совершенно новый проект, работающий на 3.0.7. Мой файл test_helper.rb точно такой:

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? У меня нет этой проблемы в других проектах Rails, которые также используют ActiveSupport :: TestCase. Кроме того, я использую Fabricator для генерации тестовых данных, но это на самом деле не объясняет эту ошибку.

Ответы [ 2 ]

3 голосов
/ 06 мая 2011

Так вот в чем дело: 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 в своем проекте, это не имеет никакого эффекта, и мне придется искать другой способ очистки базы данных между тестовыми прогонами.

1 голос
/ 20 октября 2011

Вот один хак из одной строки, который вы можете использовать, чтобы отбрасывать все таблицы после каждого теста:

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

Или, как указал JP, гем чистых баз данных, кажется, хорошо работает для этого:*

В моих тестах гем 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...