httptest

package module
v0.0.0-...-50511a6 Latest Latest
Warning

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

Go to latest
Published: Feb 5, 2022 License: MIT Imports: 12 Imported by: 0

README

httptest

Makes http testing easier

Go Coverage Status

Install

go get github.com/gmvbr/httptest

Request

Create request for testing

New
rb := httptest.New("/path", "GET")
GET
rb := httptest.Get("/path")
HEAD
rb := httptest.Head("/path")
POST
rb := httptest.Post("/path")
PUT
rb := httptest.Put("/path")
DELETE
rb := httptest.Delete("/path")
CONNECT
rb := httptest.Connect("/path")
OPTIONS
rb := httptest.Options("/path")
TRACE
rb := httptest.Trace("/path")
PATCH
rb := httptest.Patch("/path")

Query

rb.Query("key", "value)

Headers

rb.Header("key", "value)

Body

Send string

rb.String("Hello world")

Send json

type Message {
    Title       string `json:"title"`
    Description string `json:"title"`
}

rb.Json(&Message{Title: "Hello", Description: "Hello World"})

Cookies

rb.Cookie(&http.Cookie{
    Name: "Cookie Name", 
    Value: "Cookie Value",
})

Build request

req := rb.Request()

Example

req := httptest.Get("/").String("Hello world").Request()

Response

Create test

test := httptest.NewTest(testing.T, http.Response)

Expect statusCode

test.Status(expectedCode)

Expect header value

test.Header(headerKey, headerValue)

Expect body string

test.Body(expectedString)

Expect body json

test.Json(expected)
test.Cookie(&http.Cookie{
    Name:     "Cookie Name",
    Value:    "Cookie Value",
    Path:     "/",
    SameSite: http.SameSiteLaxMode,
})

Test gofiber app


import (
	"testing"

	"github.com/gofiber/fiber/v2"
	"github.com/gmvbr/httptest"
)

type Message {
    Title       string `json:"title"`
    Description string `json:"title"`
}

func TestHandler(t *testing.T) {
    app := fiber.New()

    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString("Hello, World!")
    })

    app.Post("/message", func(c *fiber.Ctx) error {
        body := &Message{}
		if err := c.BodyParser(body); err != nil {
			return c.SendStatus(fiber.StatusBadRequest)
		}
		return c.JSON(body)
    })

    // test /
    test := httptest.Get("/").Test(t, app)
    test.Status(200)
    test.Body("Hello, World!")

    // test /message
    rb := httptest.Post("/message")
    rb.Json(&Message{Title: "Hello", Description: "Hello World"})

    test := rb.Test(t, app)
    test.Status(200)
    test.Json(&Message{Title: "Hello", Description: "Hello World"})
}

Documentation

Index

Constants

View Source
const (
	GET     = "GET"
	HEAD    = "HEAD"
	POST    = "POST"
	PUT     = "PUT"
	DELETE  = "DELETE"
	CONNECT = "CONNECT"
	OPTIONS = "OPTIONS"
	TRACE   = "TRACE"
	PATCH   = "PATCH"
)

Variables

This section is empty.

Functions

func Run

func Run(t *testing.T, test T, group Group)

Types

type Cookies

type Cookies = []*http.Cookie

type Group

type Group = []Unit

type Hook

type Hook = func()

type RequestBuilder

type RequestBuilder struct {
	Method string
	Path   string

	Body io.Reader
	// contains filtered or unexported fields
}

func Connect

func Connect(path string) *RequestBuilder

func Delete

func Delete(path string) *RequestBuilder

func Get

func Get(path string) *RequestBuilder
func Head(path string) *RequestBuilder

func New

func New(path string, method string) *RequestBuilder

func Options

func Options(path string) *RequestBuilder

func Patch

func Patch(path string) *RequestBuilder

func Post

func Post(path string) *RequestBuilder

func Put

func Put(path string) *RequestBuilder

func Trace

func Trace(path string) *RequestBuilder

func (*RequestBuilder) Cookie

func (t *RequestBuilder) Cookie(cookie *http.Cookie) *RequestBuilder

func (*RequestBuilder) Header

func (t *RequestBuilder) Header(key string, value string) *RequestBuilder

func (*RequestBuilder) Json

func (t *RequestBuilder) Json(body interface{}) *RequestBuilder

func (*RequestBuilder) Query

func (t *RequestBuilder) Query(key string, value string) *RequestBuilder

func (*RequestBuilder) Request

func (t *RequestBuilder) Request() *http.Request

func (*RequestBuilder) String

func (t *RequestBuilder) String(body string) *RequestBuilder

func (*RequestBuilder) Test

func (r *RequestBuilder) Test(t assert.TestingT, test T) *TestBuilder

type T

type T interface {
	Test(req *http.Request, msTimeout ...int) (resp *http.Response, err error)
}

type TestBuilder

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

func NewTest

func NewTest(t assert.TestingT, response *http.Response) *TestBuilder

func (*TestBuilder) Body

func (r *TestBuilder) Body(expected string) *TestBuilder

func (*TestBuilder) Cookie

func (test *TestBuilder) Cookie(expected *http.Cookie) *TestBuilder

func (*TestBuilder) Header

func (r *TestBuilder) Header(key string, expected string) *TestBuilder

func (*TestBuilder) Json

func (r *TestBuilder) Json(expected interface{}) *TestBuilder

func (*TestBuilder) Status

func (r *TestBuilder) Status(expected int) *TestBuilder

type Unit

type Unit struct {
	// Name of test unit
	Name string
	// Request path
	Path string
	// Request method
	Method string
	// Request body
	Body interface{}
	// Request headers
	Headers Values
	// Request cookie
	Cookies Cookies
	// Request url query
	Query Values
	// Expect status code
	StatusCode int
	// Expect headers
	WithHeaders Values
	// Expect cookies
	WithCookies Cookies
	// Expect Body
	Want interface{}
	// Run before test
	Before Hook
	// Run after test
	After Hook
}

type Values

type Values = map[string]string

Jump to

Keyboard shortcuts

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