1

我正在使用 mysql db 在 rails 中运行 rspec。在我使用 factoryGirl 创建一个对象后,我想销毁它,以便数据库看起来很干净,以便运行下一个规范。这是我在规范中的设置方式:

before (:each) do
  User.destroy_all
  @user = Factory.create :user
end

after (:each) do
 @user.destroy
end

运行 rspec 时出错:

Failure/Error: @user.destroy_all
 NameError:
   uninitialized constant User::connection

Failure/Error: @user.destroy
 NameError:
   uninitialized constant User::connection

我确实在用户模型中设置了:dependent => :destroy这里有什么问题?

4

1 回答 1

0

问题是 @user 类变量引用的对象是“未初始化的常量”。IE,FactoryGirl 工作正常,您的变量未正确实例化 @user 对象。当连接不是数据库表字段时,您可能有对连接的引用。

如果是 MySQL 问题,则会出现与 ActiveRecord 相关的错误消息。

如果您想在测试之前/之后清理数据库,请尝试使用此 gem。它工作得很好。 http://rubygems.org/gems/database_cleaner

这是我在rails 项目中配置 RSpec 的方式,

RSpec.configure do |config|        
  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
  end
  config.before(:each) do
    DatabaseCleaner.start
  end
  config.after(:each) do
    DatabaseCleaner.clean
  end
end
于 2012-08-28T19:39:15.647 回答