저는 Rails 4를 사용 중이며 일부 테스트 리팩토링이 이전 필터 (아마도 트랜잭션으로 인해)를 사용하기 때문에 일부 RSpec 테스트가 실패하는 것을 확인했습니다. 이 게시물은 유사한 문제를 설명합니다.
일부 실행 후 레일스 테스트 데이터베이스가 지워지지 않음
DatabaseCleaner gem을 사용하는 대신 테스트 데이터베이스를 지우는 레이크 명령이 있습니까? rake db:test:prepare
Rails 4에서는 더 이상 사용되지 않는다고 생각 합니다.
post :create, user: Fabricate.attributes_for(:user)
지속적입니다. 테스트 데이터베이스를 수동으로 지울 필요가 없도록 리팩토링하는 다른 방법이 있습니까?
답변
과잉 해결책은 다음과 같습니다.
bundle exec rake db:drop RAILS_ENV=test
bundle exec rake db:create RAILS_ENV=test
bundle exec rake db:schema:load RAILS_ENV=test
이 모든 것을 레이크 작업으로 만들고 실행할 수 있습니다.
여기 에서 또 다른 해결책 은 다음 spec_helper.rb
파일 을 포함하는 것입니다.
config.after :all do
ActiveRecord::Base.subclasses.each(&:delete_all)
end
면책 조항 : 나는 이것을 테스트 하지 않았으며 모든 상황에서 작동하지 않을 수 있으므로 SO 게시물 을 읽어야합니다 .
즉, 이와 같은 상황을 피하기 위해 데이터베이스 클리너 gem을 사용하는 것이 좋습니다.
답변
그것은 될 수 있습니다:
bundle exec rake db:reset RAILS_ENV=test
답변
때때로이 명령을 실행해야 할 수도 있습니다 (선택 사항).
rails db:environment:set RAILS_ENV=test
그러나 테스트 데이터베이스를 지우려면 다음과 같이 쉽습니다.
rails db:drop db:create db:migrate RAILS_ENV=test
답변
관련 테이블에서 모든 항목을 삭제 한 후 필터를 추가 할 수 있습니다.
답변
이론적으로 이것은 ActiveRecord::Migration.maintain_test_schema!
트릭을 수행해야합니다. 넣어rails_helper.rb
답변
실행 된 명령에 따라 모든 테스트 및 개발 데이터베이스를 삭제 / 마이그레이션 (또는 삭제 및 마이그레이션)하는 간단한 레이크 작업을 작성했습니다.
여기에는 오류가 발생할 때 계속할지 여부를 사용자에게 묻는 기능이 포함되어 있으며 Open3의 popen3 메서드를 사용합니다 (예 : stdin, stdout 및 stderr에 액세스 할 수 있으며 실패한 명령이 rake 작업의 프로세스로 이어지지 않음). 중단 ( system을 사용할 때와 다름 ).
바라건대 이것은 누군가를 도울 것입니다. 🙂
https://github.com/xtrasimplicity/rake_all_db_helper/
편집 : 그러나 데이터베이스를 지우고 싶을 때마다 쉘에서 수동으로 실행해야합니다.