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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
gistfile1.rb
hosted with ❤ by GitHub
Thanks, much more universal 🙂