[ruby-on-rails] Rails 4 : 테스트 데이터베이스를 재설정하는 방법?

저는 Rails 4를 사용 중이며 일부 테스트 리팩토링이 이전 필터 (아마도 트랜잭션으로 인해)를 사용하기 때문에 일부 RSpec 테스트가 실패하는 것을 확인했습니다. 이 게시물은 유사한 문제를 설명합니다.

일부 실행 후 레일스 테스트 데이터베이스가 지워지지 않음

DatabaseCleaner gem을 사용하는 대신 테스트 데이터베이스를 지우는 레이크 명령이 있습니까? rake db:test:prepareRails 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/

편집 : 그러나 데이터베이스를 지우고 싶을 때마다 쉘에서 수동으로 실행해야합니다.


답변