Postgres データベースの統合テストを作成しようとしています。これを行うには、Go のテスト コンテナーを使用します。実際のデータベースで tern のマイグレーションを使用し、マイグレーションを migrations フォルダーに配置しました。問題は、値が環境によって異なる可能性があるため、移行の一部で .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によって提供されるランダムなポートをターゲットにする必要があると思います。コンテナの Host
メソッドと MappedPort
メソッドを使用して、testcontainers-go からホストとランダム ポートを取得して、このファイルを動的に生成する必要がある場合があります。 https://golang.testcontainers.org/features/networking /#コンテナ ホストの取得を参照してください
試してみてもらえますか?
もう 1 つのオプションは、「Testcontainers Desktop」を使用することです。これにより、特定のサービス (postgres) のポートを定義して、そのポートへのリクエストをランダムなポートに透過的にプロキシすることができます。 https://www.php.cn/link/9a4d6e8685bd057e4f68930bd7c8ecc0
を参照してください。以上がpostgresを使用したgoテストコンテナでternマイグレーションを使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。