Postgres 데이터베이스에 대한 통합 테스트를 작성하려고 합니다. 이를 위해 Go에서 테스트 컨테이너를 사용합니다. 실제 데이터베이스에서 tern 마이그레이션을 사용하고 마이그레이션을 마이그레이션 폴더에 배치했습니다. 문제는 환경에 따라 값이 달라질 수 있기 때문에 일부 마이그레이션에서 .tern.conf 파일의 속성을 사용한다는 것입니다. 로컬에 대해 유사한 구성 파일 local.tern.conf를 만들고 전역 변수 설정을 시도했습니다. 그런데 어떤 이유로 마이그레이션을 실행할 때 값이 선택되지 않습니다. 여기에 예가 있습니다 -
으아악이것은 내 마이그레이션의 일부입니다 -
으아악local.tern.conf입니다-
func SetupTestDatabase() *TestDatabase { // Set the TERN_CONFIG environment variable to the path of your local.tern.conf file if err := os.Setenv("TERN_CONFIG", "../local.tern.conf"); err != nil { // Handle error if setting the environment variable fails zap.S().Fatal("failed to set TERN_CONFIG", err) } // setup db container ctx, cancel := context.WithTimeout(context.Background(), time.Second*60) defer cancel() container, dbInstance, dbAddr, err := createContainer(ctx) if err != nil { zap.S().Fatal("failed to setup test", err) } conn, _ := dbInstance.Acquire(ctx) m, err := migrate.NewMigrator(ctx, conn.Conn(), "schema_version_table") if err != nil { zap.S().Fatal("failed to setup migrator", err) } if err := m.LoadMigrations("../migrations"); err != nil { zap.S().Fatal("failed to load migrations", err) return nil } if len(m.Migrations) == 0 { zap.S().Fatal("no migrations found") return nil } if err := m.Migrate(ctx); err != nil { zap.S().Fatal("failed to migrate", err) return nil } return &TestDatabase{ container: container, DbInstance: dbInstance, DbAddress: dbAddr, } }
구성 파일은 Postgres의 기본 5432 포트 대신 testcontainers-go에서 제공하는 임의의 포트를 대상으로 해야 한다고 생각합니다. testcontainers-go에서 호스트와 임의의 포트를 가져와 컨테이너의 Host
和 MappedPort
메서드를 사용하여 이 파일을 동적으로 생성해야 할 수도 있습니다. 컨테이너 호스트를 얻으려면 https://golang.testcontainers.org/features/networking/#을 참조하세요
한번 해볼래?
또 다른 옵션은 특정 서비스(postgres)에 대한 포트를 정의하여 해당 포트에 대한 모든 요청을 무작위 포트로 투명하게 프록시할 수 있는 "Testcontainers Desktop"을 사용하는 것입니다. https://www.php.cn/link/9a4d6e8685bd057e4f68930bd7c8ecc0
를 참고하세요위 내용은 Postgres를 사용하여 Go 테스트 컨테이너에서 tern 마이그레이션 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!