加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – RSpec数据库清洁,不正确清理

发布时间:2020-12-16 22:43:52 所属栏目:百科 来源:网络整理
导读:我真的不明白为什么 DatabaseCleaner不清理我的测试数据库.这是我得到提示 1.9.2p290 :007 DatabaseCleaner.clean – = [#DatabaseCleaner::Base:0x007fa7e4dd8b58 @autodetected=true,@orm=:active_record,@strategy=#DatabaseCleaner::ActiveRecord::Trans
我真的不明白为什么 DatabaseCleaner不清理我的测试数据库.这是我得到提示
1.9.2p290 :007 > DatabaseCleaner.clean

=> [#<DatabaseCleaner::Base:0x007fa7e4dd8b58 @autodetected=true,@orm=:active_record,@strategy=#<DatabaseCleaner::ActiveRecord::Transaction:0x007fa7e4dc14f8 @db=:default>>]

这似乎没有正确设置数据库(应该是:测试),所以我得到一个解决方案

DatabaseCleaner[:active_record,:connection => :test].clean
 # => nil

宝石似乎设置正确:

1.9.2p290 :007 > DatabaseCleaner[:active_record,:connection => :test]

#<DatabaseCleaner::Base:0x007fe8fcfd4868 @orm=:active_record,@strategy=#<DatabaseCleaner::ActiveRecord::Transaction:0x007fe8fcfd2748 @db=:test,@connection_hash={"adapter"=>"sqlite3","database"=>"db/test.sqlite3","pool"=>5,"timeout"=>5000}>,@db=:test>

这似乎正确地设置了测试数据库,但是它仍然不能正确清理数据库.有什么建议么?

非常感谢你.

解决方法

即使数据库清理器配置正确,也很容易将数据留下.
config.before(:suite) do
  DatabaseCleaner.clean_with :truncation  # clean DB of any leftover data
  DatabaseCleaner.strategy = :transaction # rollback transactions between each test
  Rails.application.load_seed # (optional) seed DB
end

config.before(:each) do
  DatabaseCleaner.start
end

config.after(:each) do
  DatabaseCleaner.clean
end

以上配置启动&在每个测试的任一侧运行清洁.

如果您之前使用过:所有在您的规格中,您最终可能会遇到数据:

describe User do
  # Before all is outside the before :each 
  before :all do
    @user = User.create(:email => 'hello@example.com')
  end

  ...tests here
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读