testenv

package module
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 31, 2025 License: MIT Imports: 17 Imported by: 0

README

testenv

Used to initialize the test environment, assisted by containers.

Usage

import (
	"testing"

	"github.com/theplant/testenv"
	"gorm.io/gorm"
)

type TestModel struct {
	gorm.Model
	Description string
}

var db *gorm.DB

func TestMain(m *testing.M) {
	env, err := testenv.New().DBEnable(true).SetUp()
	if err != nil {
		panic(err)
	}
	defer env.TearDown()

	// some initialization
	db = env.DB
	if err = db.AutoMigrate(&TestModel{}); err != nil {
		panic(err)
	}

	m.Run()
}

func TestSelectVersion(t *testing.T) {
	var version string
	if err := db.Raw("SELECT version()").Scan(&version).Error; err != nil {
		t.Fatal(err)
	}
	t.Logf("current database version: %q", version)
}

func TestSetupTestEnv(t *testing.T) {
	// If you don't want to initialize in TestMain
	env, err := testenv.New().DBEnable(true).SetUpWithT(t)
	if err != nil {
		t.Fatal(err)
	}
	var version string
	if err := env.DB.Raw("SELECT version()").Scan(&version).Error; err != nil {
		t.Fatal(err)
	}
	t.Logf("current database version: %q", version)
}

Specify the database port

  1. Use environment variables:
export THEPLANT_TEST_ENV_DB_PORT="5432"
  1. Coding:
env, err := testenv.New().DBEnable(true).DBPort(5432).SetUp()

Troubleshooting

If you encounter this error: Failed to get image auth for https://index.docker.io/v1/. Setting empty credentials for the image: postgres:16.3-alpine, try docker pull postgres:16.3-alpine first.

Documentation

Index

Constants

View Source
const (
	EnvDBPort    = "THEPLANT_TEST_ENV_DB_PORT"
	EnvRedisPort = "THEPLANT_TEST_ENV_REDIS_PORT"
)

Variables

This section is empty.

Functions

func SetupDatabase added in v0.1.0

func SetupDatabase(ctx context.Context, image, dbUser, dbPass, dbName, hostPort string) (_ *gorm.DB, _ func() error, xerr error)

func SetupRedis added in v0.1.0

func SetupRedis(ctx context.Context, image, hostPort string) (_ *redis.Client, _ func() error, xerr error)

Types

type Builder added in v0.1.0

type Builder struct {
	// contains filtered or unexported fields
}

func New

func New() *Builder

func (*Builder) Context added in v0.1.0

func (b *Builder) Context(ctx context.Context) *Builder

func (*Builder) DBEnable added in v0.1.0

func (b *Builder) DBEnable(v bool) *Builder

func (*Builder) DBImage added in v0.1.0

func (b *Builder) DBImage(v string) *Builder

func (*Builder) DBName added in v0.1.0

func (b *Builder) DBName(v string) *Builder

func (*Builder) DBPass added in v0.1.0

func (b *Builder) DBPass(v string) *Builder

func (*Builder) DBPort added in v0.1.0

func (b *Builder) DBPort(v string) *Builder

func (*Builder) DBUser added in v0.1.0

func (b *Builder) DBUser(v string) *Builder

func (*Builder) RedisEnable added in v0.1.0

func (b *Builder) RedisEnable(v bool) *Builder

func (*Builder) RedisImage added in v0.1.0

func (b *Builder) RedisImage(v string) *Builder

func (*Builder) RedisPort added in v0.1.0

func (b *Builder) RedisPort(v string) *Builder

func (*Builder) SetUp added in v0.1.0

func (b *Builder) SetUp() (*TestEnv, error)

func (*Builder) SetUpWithT added in v0.1.0

func (b *Builder) SetUpWithT(t *testing.T) (*TestEnv, error)

type TestEnv

type TestEnv struct {
	DB    *gorm.DB
	Redis *redis.Client
	// contains filtered or unexported fields
}

func (*TestEnv) TearDown

func (env *TestEnv) TearDown() error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL