Tried a few strategies, but this seems to be the fastest:
DatabaseCleaner truncate_all: 0.8s
This: 0.2s
# fast truncation of all tables that need truncations (select is 10x faster then truncate) # https://grosser.it/2012/07/03/rubyactiverecord-fastest-way-to-truncate-test-database/ def truncate_all_tables config = ActiveRecord::Base.configurations[::Rails.env] connection = ActiveRecord::Base.connection connection.disable_referential_integrity do connection.tables.each do |table_name| next if connection.select_value("SELECT count(*) FROM #{table_name}") == 0 case config["adapter"] when "mysql", "mysql2", "postgresql" connection.execute("TRUNCATE #{table_name}") when "sqlite", "sqlite3" connection.execute("DELETE FROM #{table_name}") connection.execute("DELETE FROM sqlite_sequence where name='#{table_name}'") end end connection.execute("VACUUM") if config["adapter"] == "sqlite3" end end
This does not work with SQLite:
`SQLite3::SQLException: near “TRUNCATE”: syntax error`
This should fix it:
gistfile1.rb
hosted with ❤ by GitHub
Thanks, much more universal 🙂