2014-09-16 5 views
57

필자는 Rails 4를 사용 중이며 일부 테스트 리팩터링이 필터 (예 : 트랜잭션 때문에)를 사용하기 때문에 일부 RSpec 테스트가 실패한 것으로 나타났습니다. DatabaseCleaner 보석을 사용하는 대신에레일 4 : 테스트 데이터베이스를 재설정하는 방법?

rails test database not clearing after some runs

, 테스트 데이터베이스를 삭제하는 레이크 명령이 :이 포스팅은 유사한 문제에 대해 설명? 나는 rake db:test:prepare이 경우

post :create, user: Fabricate.attributes_for(:user) 

가 지속적처럼 거래하기 전에, 또한 레일 4에서 사용되지 않습니다 생각합니다. 수동으로 테스트 데이터베이스를 지울 필요가 없도록 리팩터링하는 다른 방법이 있습니까?

답변

1

관련 테이블에서 모든 항목을 삭제하는 필터를 추가 할 수 있습니다.

85

잔인한 솔루션은 다음과 같습니다

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 

당신은 모든 레이크 작업이를하고 그것을 실행할 수 있습니다.

here 또 다른 해결책은 당신의 spec_helper.rb 다음 파일을

config.after :all do 
    ActiveRecord::Base.subclasses.each(&:delete_all) 
end 

면책 조항을 포함하는 것입니다 :이 테스트를하지 않은이 모든 상황에서 작동하지 않을 수 있습니다 당신은 SO post을 읽어야합니다.

그렇다면 이런 상황을 피하기 위해 데이터베이스 클리너 젬을 사용하는 것이 좋습니다.

+1

처음 3 개의 rake db : *는 모든 테이블을 삭제하고 스키마에서 생성하므로 마지막 테이블로만 바꿀 수 있습니다. – konole

+0

'schema : load' 단계 전에'bundle exec rake db : RAILS_ENV = test'를 작성하지 않았습니다. – Aleks

+0

레일즈 5의 경우'ActiveRecord :: Base' 대신'ApplicationRecord'를 사용하십시오 https://blog.bigbinary.com/2015 /12/28/application-record-in-rails-5.html –

60

이 될 수 있습니다

bundle exec rake db:reset RAILS_ENV=test 
+10

나는 또한 rake db : seed'를 실행합니다 ... 이것은 문제가 될 수도 있고 아닐 수도 있습니다 –

0

는 이론적으로이 ActiveRecord::Migration.maintain_test_schema! 트릭을 할해야합니다. rails_helper.rb

0

실행 된 명령에 따라 모든 테스트 및 개발 데이터베이스를 삭제/마이그레이션 (또는 삭제 & 마이그레이션)하는 간단한 레이크 작업이 끝났습니다.

오류가 발생했을 때 계속 진행할 것인지 묻는 기능이 포함되어 있으며 Open3의 popen3 메서드를 사용합니다 (예 : stdin, stdout 및 stderr에 액세스 할 수 있음). 레이크 작업의 프로세스가 중단됩니다 (시스템을 사용할 때와 달리).

이렇게하면 도움이되기를 바랍니다. :)

https://github.com/xtrasimplicity/rake_all_db_helper/

편집 : 당신은 그러나, 데이터베이스를 삭제하고자 할 때마다이 수동으로 쉘에서 실행해야합니다.

관련 문제