【问题标题】:mysql error: can't destroy an object that is created using factoryGirlmysql 错误:无法销毁使用 factoryGirl 创建的对象
【发布时间】:2012-04-29 06:07:30
【问题描述】:

我使用 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 这里有什么问题?

【问题讨论】:

  • 小心...不要说factoryWife!那就更难摧毁了!所以在升级之前要小心.... :-)

标签: mysql rspec connection destroy initialization


【解决方案1】:

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

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

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

这是我在a rails project 中配置 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

【讨论】:

    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    相关资源
    最近更新 更多