Rails 4 : 테스트 데이터베이스를 재설정하는 방법?


87

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

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

DatabaseCleaner gem을 사용하는 대신 테스트 데이터베이스를 지우는 레이크 명령이 있습니까? rake db:test:prepareRails 4에서는 더 이상 사용되지 않는다고 생각 합니다.

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

지속적입니다. 테스트 데이터베이스를 수동으로 지울 필요가 없도록 리팩토링하는 다른 방법이 있습니까?

답변:


120

과잉 해결책은 다음과 같습니다.

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을 사용하는 것이 좋습니다.


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

2
Rails 5 ApplicationRecord의 경우 ActiveRecord::Base blog.bigbinary.com/2015/12/28/
Yo

3
rake db:structure:loadschema.rb 대신 structure.sql을 사용하는 경우 사용하십시오 .
Archonic

2
위의 깔끔한 1 라이너는 간단합니다.RAILS_ENV=test bundle exec rake db:drop db:create db:schema:load
stwr667

98

그것은 될 수 있습니다:

bundle exec rake db:reset RAILS_ENV=test

20
또한 실행 통지 rake db:seed 또는 문제가되지 않을 수있다 ...
해리 목재

1
Rails 5를 사용하는 경우 명령은 이제 rake 대신 rails 입니다.bundle exec rails db:reset RAILS_ENV=test
Uriel Hernández

15

때때로이 명령을 실행해야 할 수도 있습니다 (선택 사항).

rails db:environment:set RAILS_ENV=test

그러나 테스트 데이터베이스를 지우려면 다음과 같이 쉽습니다.

rails db:drop db:create db:migrate RAILS_ENV=test


2

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


0

이론적으로 이것은 ActiveRecord::Migration.maintain_test_schema!트릭을 수행해야합니다. 넣어rails_helper.rb


0

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

여기에는 오류가 발생할 때 계속할지 여부를 사용자에게 묻는 기능이 포함되어 있으며 Open3의 popen3 메서드를 사용합니다 (예 : stdin, stdout 및 stderr에 액세스 할 수 있으며 실패한 명령이 rake 작업의 프로세스로 이어지지 않음). 중단 ( system을 사용할 때와 다름 ).

바라건대 이것은 누군가를 도울 것입니다. :)

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.