GitLab에서 Rails 마이그레이션 테스트하기
GitLab에서 Rails 마이그레이션을 신뢰성 있게 검증하기 위한 마이그레이션 테스트 작성 방법과 테스트 헬퍼 사용법을 설명합니다.
Rails 마이그레이션을 신뢰성 있게 검사하려면 데이터베이스 스키마에 대해 테스트해야 합니다. 마이그레이션 테스트를 작성해야 하는 경우 # Post 마이그레이션( /db/post_migrate ) 및 백그라운드 마이그레이션 ( lib/gitlab/background_migration )은 반드시 마이그레이션 테스트를 수행해야 합니다. 마이그레이션이 데이터 마이그레이션인 경우 반드시 마이그레이션 테스트가 있어야 합니다. 그 외 마이그레이션은 필요에 따라 마이그레이션 테스트를 가질 수 있습니다. 스키마 변경만 수행하는 post 마이그레이션에 대해서는 테스트를 강제하지 않습니다. 작동 방식 # (ee/)spec/migrations/ 및 spec/lib/(ee/)background_migrations 의 모든 스펙은 자동으로 :migration RSpec 태그가 지정됩니다. 이 태그는 spec/support/migration.rb 에서 일부 커스텀 RSpec before 및 after 훅을 실행합니다. :gitlab_main 이외의 데이터베이스 스키마(예: :gitlab_ci )에 대해 마이그레이션을 수행하는 경우, migration: :gitlab_ci 와 같은 RSpec 태그로 명시적으로 지정해야 합니다. 예시는 spec/migrations/change_public_projects_cost_factor_spec.rb 를 참조하세요. before 훅은 테스트 대상 마이그레이션이 아직 마이그레이션되지 않은 시점까지 모든 마이그레이션을 되돌립니다. 즉, 커스텀 RSpec 훅이 이전 마이그레이션을 찾아 데이터베이스를 이전 마이그레이션 버전으로 다운 마이그레이션합니다. 이 방식을 통해 데이터베이스 스키마에 대해 마이그레이션을 테스트할 수 있습니다. after 훅은 데이터베이스를 업 마이그레이션하여 최신 스키마 버전을 복원합니다. 이렇게 하면 이 프로세스가 이후 스펙에 영향을 미치지 않으며 올바른 격리가 보장됩니다. ActiveRecord::Migration 클래스 테스트 # ActiveRecord::Migration 클래스(예: 일반 마이그레이션 db/migrate 또는 post 마이그레이션 db/post_migrate )를 테스트하려면, Rails에서 자동 로드되지 않으므로 require_migration! 헬퍼 메서드를 사용하여 마이그레이션 파일을 로드해야 합니다. 예시: require 'spec_helper' require_migration! RSpec.describe ... 테스트 헬퍼 # require_migration! # 마이그레이션 파일은 Rails에서 자동 로드되지 않으므로 직접 로드해야 합니다. 이를 위해 require_migration! 헬퍼 메서드를 사용할 수 있으며, 스펙 파일명을 기반으로 올바른 마이그레이션 파일을 자동으로 로드합니다. require_migration! 을 사용하여 파일명에 스키마 버전이 포함된 스펙 파일(예: 2021101412150000_populate_foo_column_spec.rb )에서 마이그레이션