pgxtesting

package module
v0.1.15 Latest Latest
Warning

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

Go to latest
Published: Jan 11, 2022 License: MIT Imports: 10 Imported by: 0

README

Go Reference

pgxtesting

A Go package to give each test it's own database when testing projects that use pgx.

Documentation

Overview

Example
package main

import (
	"context"
	"log"
	"testing"

	"github.com/go-pa/pgxtesting"
)

func main() {
	var t *testing.T // the t argument in your test function

	pool := pgxtesting.CreateTestDatabaseEnv(t)

	// And you can ten do something with the database...
	row := pool.QueryRow(context.Background(), "SELECT current_database()")
	var v string
	err := row.Scan(&v)
	if err != nil {
		t.Error(err)
		return
	}
	log.Println("the test database name if", v)

	// example using go-migrate, commented out to not depend on go-migrate:

	// // If you need an URL for the postgres test database you use pool.URL.
	// // If you need to strip pgxpool specific parameters from it to use it
	// // with the std library sql package or go-migrate, use the ConnURL()
	// // method.
	// m, _ := migrate.New(
	// 	"file://migrations",
	// 	pool.URL.ConnURL().String())

	// if err := m.Up(); err != nil {
	// 	t.Error(err)
	// 	return
	// }

}
Output:

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetDefaultURL

func GetDefaultURL() string

SetDefaultURL returns the default URL used to connect to the postgres server while creating and destorying test databases.

func GetEnvName

func GetEnvName() string

GetEnvName gets the enviroment variable name used to fetch the pgxpool URL, defaults name is PGURL.

func GetURL

func GetURL() string

GetURL returns the pgx pool URL from environment or the default value.

func SetDefaultURL

func SetDefaultURL(pgxurl string)

SetDefaultURL sets the default URL for postgres tests, panics if the url is invalid

func SetEnvName

func SetEnvName(name string)

SetEnvName sets the enviroment variable name used to fetch the pgxpool URL, defaults name is PGURL.

Types

type PoolURL

type PoolURL string

PoolURL makes for quick manipulation of some paramets that are important for tests. The url is expected to always be a valid URL, utility functions will panic if it's not.

func NewPoolURL

func NewPoolURL(poolURL string) (PoolURL, error)

NewPoolURL validates the input yurl

func (PoolURL) ConnURL

func (pu PoolURL) ConnURL() PoolURL

ConnURL returns a valid non pool connection url (can be used with go-migrate or sql.db)

func (PoolURL) Name

func (pu PoolURL) Name() string

Name returns the database name

func (PoolURL) SetName

func (pu PoolURL) SetName(dbName string) PoolURL

SetName sets the database name

func (PoolURL) String

func (pu PoolURL) String() string

type TB added in v0.1.4

type TB interface {
	Cleanup(func())
	Error(args ...interface{})
	Errorf(format string, args ...interface{})
	Fail()
	FailNow()
	Failed() bool
	Fatal(args ...interface{})
	Fatalf(format string, args ...interface{})
	Helper()
	Log(args ...interface{})
	Logf(format string, args ...interface{})
	Name() string
	Skip(args ...interface{})
	SkipNow()
	Skipf(format string, args ...interface{})
	Skipped() bool
	TempDir() string
}

type TestPool

type TestPool struct {
	*pgxpool.Pool
	Name string // database name
	URL  PoolURL
	// contains filtered or unexported fields
}

TestPool .

func CreateTestDatabase

func CreateTestDatabase(tb TB, pgxPoolURL string) *TestPool
Example
package main

import (
	"testing"

	"github.com/go-pa/pgxtesting"
)

func main() {
	var t *testing.T // the t argument in your test function

	// You can create a test database from a database url.
	// It will automatically clean up (drop the database) after the test has been run.
	// The CreateTestDatabase function will fatal the test if the
	// connection/creation to the datavbase fails there are no errors to
	// handle.
	pool := pgxtesting.CreateTestDatabase(t,
		"postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable&pool_max_conns=500")

	// You can close the pool early if you want to free up database
	// connections before the test has run and the testing package does it
	// automatically for you. Close() drops the database and closes the
	// connection.
	// If you have a lot of subtests and each creates it's own test
	// database this might be a good idea because the testing package does
	// not clean up before all sub tests are done so you might exceed
	// maximum number of connections if you have many subtests.
	pool.Close()
}
Output:

func CreateTestDatabaseEnv

func CreateTestDatabaseEnv(tb TB) *TestPool
Example
package main

import (
	"testing"

	"github.com/go-pa/pgxtesting"
)

func main() {
	var t *testing.T // the t argument in your test function

	// You set the pgxtesting default postgres url in a
	// init() function in one of your test files.
	pgxtesting.SetDefaultURL(
		"postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable&pool_max_conns=500")

	// and then only use this function to get a new pool for each test.
	_ = pgxtesting.CreateTestDatabaseEnv(t)
}
Output:

func (*TestPool) Close

func (t *TestPool) Close()

Close closes the test pool and deletes the testing database.

Jump to

Keyboard shortcuts

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