在新的Rails 3项目中未定义的方法`use_transactional_fixtures =’
尝试使用MongoDB和Mongoid在Rails3项目中运行测试时出错:
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唯一的方法吗? 我在其他也使用ActiveSupport :: TestCase的rails项目中没有这个问题。 此外,我使用Fabricator生成我的测试数据,但这并不能解释这个错误。
所以这是交易: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,这没有任何效果,我将不得不找到另一种方法来在测试运行之间清除我的数据库。
这是一个单行黑客,您可以使用它在每次测试后删除所有表:
Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop) # transactional fixtures hack for mongo
或者正如JP指出的那样,数据库清理程序gem似乎可以很好地解决这个问题: https : //github.com/bmabey/database_cleaner
在我的测试中,database_cleaner gem的速度提高了大约4%,我猜是因为它使用截断而不是删除表。 以下是使用数据库清理程序和rspec的示例spec_helper.rb
文件
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
- 如何在Ruby on Rails和Test :: Unit上测试Controllerfilter
- Rails 4 form_for error:ActionController的未定义方法`model_name’::参数:Class
- 建议在Ruby中为S3 Bucket生成预签名URL的方法
- 相关模型的每个实例的活动管理范围
- Redmine安装 – ruby rails 2.3.11手动下载
- Rails中的Bootstrap模式保持显示第一条记录
- Rails – Savon设置了多个名称空间
- 使用HABTM关系更新复选框的值 – Rails
- Rails + MongoID +简单forms关联:#Mongoid :: Relations :: Metadata的未定义方法`options’