Estou no Rails 4 e percebi que alguns de meus testes RSpec estão falhando porque algumas de minhas refatorações de teste usam um filtro anterior (provavelmente por causa de transações). Esta postagem descreve um problema semelhante:
O banco de dados de teste do Rails não limpa após algumas execuções
Em vez de usar a gem DatabaseCleaner, existe um comando rake para limpar o banco de dados de teste? Eu acredito que rake db:test:prepare
está obsoleto no Rails 4. Além disso, se antes de transações como
post :create, user: Fabricate.attributes_for(:user)
são persistentes. Existe uma forma alternativa de refatoração para evitar a necessidade de limpar manualmente o banco de dados de teste?
fonte
ApplicationRecord
vez deActiveRecord::Base
blog.bigbinary.com/2015/12/28/…rake db:structure:load
se estiver usando structure.sql em vez de schema.rb.RAILS_ENV=test bundle exec rake db:drop db:create db:schema:load
Pode ser:
bundle exec rake db:reset RAILS_ENV=test
fonte
rake db:seed
... o que pode ou não ser um problemabundle exec rails db:reset RAILS_ENV=test
Às vezes, pode ser necessário executar este comando (opcional)
rails db:environment:set RAILS_ENV=test
Mas, com certeza, limpar seu banco de dados de teste deve ser tão fácil quanto:
rails db:drop db:create db:migrate RAILS_ENV=test
fonte
Você pode adicionar um filtro posterior, excluindo todas as entradas das tabelas em questão.
fonte
Em teoria, isso
ActiveRecord::Migration.maintain_test_schema!
deve funcionar. Coloque dentrorails_helper.rb
fonte
Acabei escrevendo uma tarefa simples de rake que descarta / migra (ou descarta e migra) todos os bancos de dados de teste e desenvolvimento, dependendo do comando executado.
Inclui a funcionalidade para perguntar ao usuário se deseja continuar quando ocorre um erro e usa o método popen3 do Open3 (de modo que possamos acessar stdin, stdout e stderr; e quaisquer comandos com falha não resultam no processo da tarefa rake abortando (ao contrário de quando usar o sistema )).
Espero que isso ajude alguém. :)
https://github.com/xtrasimplicity/rake_all_db_helper/
editar: No entanto, isso precisará ser executado manualmente a partir de seu shell, sempre que desejar limpar seu banco de dados.
fonte