Categorygithub.com/gavv/httpexpect/v2
modulepackage
2.16.0
Repository: https://github.com/gavv/httpexpect.git
Documentation: pkg.go.dev

# README

httpexpect GoDev Build Coveralls GitHub release Discord

Concise, declarative, and easy to use end-to-end HTTP and REST API testing for Go (golang).

Basically, httpexpect is a set of chainable builders for HTTP requests and assertions for HTTP responses and payload, on top of net/http and several utility packages.

Workflow:

  • Incrementally build HTTP requests.
  • Inspect HTTP responses.
  • Inspect response payload recursively.

Features

Request builder
Response assertions
  • Response status, predefined status ranges.
  • Headers, cookies, payload: JSON, JSONP, forms, text.
  • Round-trip time.
  • Custom reusable response matchers.
Payload assertions
  • Type-specific assertions, supported types: object, array, string, number, boolean, null, datetime.
  • Regular expressions.
  • Simple JSON queries (using subset of JSONPath), provided by jsonpath package.
  • JSON Schema validation, provided by gojsonschema package.
WebSocket support (thanks to @tyranron)
  • Upgrade an HTTP connection to a WebSocket connection (we use gorilla/websocket internally).
  • Interact with the WebSocket server.
  • Inspect WebSocket connection parameters and WebSocket messages.
Pretty printing
  • Verbose error messages.
  • JSON diff is produced on failure using gojsondiff package.
  • Failures are reported using testify (assert or require package) or standard testing package.
  • JSON values are pretty-printed using encoding/json, Go values are pretty-printed using litter.
  • Dumping requests and responses in various formats, using httputil, http2curl, or simple compact logger.
  • Color support using fatih/color.
Tuning
  • Tests can communicate with server via real HTTP client or invoke net/http or fasthttp handler directly.
  • User can provide custom HTTP client, WebSocket dialer, HTTP request factory (e.g. from the Google App Engine testing).
  • User can configure formatting options or provide custom templates based on text/template engine.
  • Custom handlers may be provided for logging, printing requests and responses, handling succeeded and failed assertions.

Versions

The versions are selected according to the semantic versioning scheme. Every new major version gets its own stable branch with a backwards compatibility promise. Releases are tagged from stable branches.

The current stable branch is v2. Previous branches are still maintained, but no new features are added.

If you're using go.mod, use a versioned import path:

import "github.com/gavv/httpexpect/v2"

Otherwise, use gopkg.in import path:

import "gopkg.in/gavv/httpexpect.v2"

Documentation

Documentation is available on pkg.go.dev. It contains an overview and reference.

Community

Community forum and Q&A board is right on GitHub in discussions tab.

For more interactive discussion, you can join discord chat.

Contributing

Feel free to report bugs, suggest improvements, and send pull requests! Please add documentation and tests for new features.

This project highly depends on contributors. Thank you all for your amazing work!

If you would like to submit code, see HACKING.md.

Donating

If you would like to support my open-source work, you can do it here:

Thanks!

Examples

See _examples directory for complete standalone examples.

  • fruits_test.go

    Testing a simple CRUD server made with bare net/http.

  • iris_test.go

    Testing a server made with iris framework. Example includes JSON queries and validation, URL and form parameters, basic auth, sessions, and streaming. Tests invoke the http.Handler directly.

  • echo_test.go

    Testing a server with JWT authentication made with echo framework. Tests use either HTTP client or invoke the http.Handler directly.

  • gin_test.go

    Testing a server utilizing the gin web framework. Tests invoke the http.Handler directly.

  • fasthttp_test.go

    Testing a server made with fasthttp package. Tests invoke the fasthttp.RequestHandler directly.

  • websocket_test.go

    Testing a WebSocket server based on gorilla/websocket. Tests invoke the http.Handler or fasthttp.RequestHandler directly.

  • oauth2_test.go

    Testing a OAuth2 server with oauth2.

  • gae_test.go

    Testing a server running under the Google App Engine.

  • formatter_test.go

    Testing with custom formatter for assertion messages.

Quick start

Hello, world!
package example

import (
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/gavv/httpexpect/v2"
)

func TestFruits(t *testing.T) {
	// create http.Handler
	handler := FruitsHandler()

	// run server using httptest
	server := httptest.NewServer(handler)
	defer server.Close()

	// create httpexpect instance
	e := httpexpect.Default(t, server.URL)

	// is it working?
	e.GET("/fruits").
		Expect().
		Status(http.StatusOK).JSON().Array().IsEmpty()
}
JSON
orange := map[string]interface{}{
	"weight": 100,
}

e.PUT("/fruits/orange").WithJSON(orange).
	Expect().
	Status(http.StatusNoContent).NoContent()

e.GET("/fruits/orange").
	Expect().
	Status(http.StatusOK).
	JSON().Object().ContainsKey("weight").HasValue("weight", 100)

apple := map[string]interface{}{
	"colors": []interface{}{"green", "red"},
	"weight": 200,
}

e.PUT("/fruits/apple").WithJSON(apple).
	Expect().
	Status(http.StatusNoContent).NoContent()

obj := e.GET("/fruits/apple").
	Expect().
	Status(http.StatusOK).JSON().Object()

obj.Keys().ContainsOnly("colors", "weight")

obj.Value("colors").Array().ConsistsOf("green", "red")
obj.Value("colors").Array().Value(0).String().IsEqual("green")
obj.Value("colors").Array().Value(1).String().IsEqual("red")
obj.Value("colors").Array().First().String().IsEqual("green")
obj.Value("colors").Array().Last().String().IsEqual("red")
JSON Schema and JSON Path
schema := `{
	"type": "array",
	"items": {
		"type": "object",
		"properties": {
			...
			"private": {
				"type": "boolean"
			}
		}
	}
}`

repos := e.GET("/repos/octocat").
	Expect().
	Status(http.StatusOK).JSON()

// validate JSON schema
repos.Schema(schema)

// run JSONPath query and iterate results
for _, private := range repos.Path("$..private").Array().Iter() {
	private.Boolean().IsFalse()
}
JSON decoding
type User struct {
	Name   string `json:"name"`
	Age    int    `json:"age"`
	Gender string `json:"gender"`
}

var user User
e.GET("/user").
	Expect().
	Status(http.StatusOK).
	JSON().
	Decode(&user)
	
if user.Name != "octocat" {
	t.Fail()
}
Forms
// post form encoded from struct or map
e.POST("/form").WithForm(structOrMap).
	Expect().
	Status(http.StatusOK)

// set individual fields
e.POST("/form").WithFormField("foo", "hello").WithFormField("bar", 123).
	Expect().
	Status(http.StatusOK)

// multipart form
e.POST("/form").WithMultipart().
	WithFile("avatar", "./john.png").WithFormField("username", "john").
	Expect().
	Status(http.StatusOK)
URL construction
// construct path using ordered parameters
e.GET("/repos/{user}/{repo}", "octocat", "hello-world").
	Expect().
	Status(http.StatusOK)

// construct path using named parameters
e.GET("/repos/{user}/{repo}").
	WithPath("user", "octocat").WithPath("repo", "hello-world").
	Expect().
	Status(http.StatusOK)

// set query parameters
e.GET("/repos/{user}", "octocat").WithQuery("sort", "asc").
	Expect().
	Status(http.StatusOK)    // "/repos/octocat?sort=asc"
Headers
// set If-Match
e.POST("/users/john").WithHeader("If-Match", etag).WithJSON(john).
	Expect().
	Status(http.StatusOK)

// check ETag
e.GET("/users/john").
	Expect().
	Status(http.StatusOK).Header("ETag").NotEmpty()

// check Date
t := time.Now()

e.GET("/users/john").
	Expect().
	Status(http.StatusOK).Header("Date").AsDateTime().InRange(t, time.Now())
Cookies
// set cookie
t := time.Now()

e.POST("/users/john").WithCookie("session", sessionID).WithJSON(john).
	Expect().
	Status(http.StatusOK)

// check cookies
c := e.GET("/users/john").
	Expect().
	Status(http.StatusOK).Cookie("session")

c.Value().IsEqual(sessionID)
c.Domain().IsEqual("example.com")
c.Path().IsEqual("/")
c.Expires().InRange(t, t.Add(time.Hour * 24))
Regular expressions
// simple match
e.GET("/users/john").
	Expect().
	Header("Location").
	Match("http://(.+)/users/(.+)").Values("example.com", "john")

// check capture groups by index or name
m := e.GET("/users/john").
	Expect().
	Header("Location").Match("http://(?P<host>.+)/users/(?P<user>.+)")

m.Index(0).IsEqual("http://example.com/users/john")
m.Index(1).IsEqual("example.com")
m.Index(2).IsEqual("john")

m.Name("host").IsEqual("example.com")
m.Name("user").IsEqual("john")
Redirection support
e.POST("/path").
	WithRedirectPolicy(httpexpect.FollowAllRedirects).
	WithMaxRedirects(5).
	Expect().
	Status(http.StatusOK)

e.POST("/path").
	WithRedirectPolicy(httpexpect.DontFollowRedirects).
	Expect().
	Status(http.StatusPermanentRedirect)
Retry support
// default retry policy
e.POST("/path").
	WithMaxRetries(5).
	Expect().
	Status(http.StatusOK)

// custom retry policy
e.POST("/path").
	WithMaxRetries(5).
	WithRetryPolicy(httpexpect.RetryAllErrors).
	Expect().
	Status(http.StatusOK)

// custom retry delays
e.POST("/path").
	WithMaxRetries(5).
	WithRetryDelay(time.Second, time.Minute).
	Expect().
	Status(http.StatusOK)
Subdomains and per-request URL
e.GET("/path").WithURL("http://example.com").
	Expect().
	Status(http.StatusOK)

e.GET("/path").WithURL("http://subdomain.example.com").
	Expect().
	Status(http.StatusOK)
WebSocket support
ws := e.GET("/mysocket").WithWebsocketUpgrade().
	Expect().
	Status(http.StatusSwitchingProtocols).
	Websocket()
defer ws.Disconnect()

ws.WriteText("some request").
	Expect().
	TextMessage().Body().IsEqual("some response")

ws.CloseWithText("bye").
	Expect().
	CloseMessage().NoContent()
Reusable builders
e := httpexpect.Default(t, "http://example.com")

r := e.POST("/login").WithForm(Login{"ford", "betelgeuse7"}).
	Expect().
	Status(http.StatusOK).JSON().Object()

token := r.Value("token").String().Raw()

auth := e.Builder(func (req *httpexpect.Request) {
	req.WithHeader("Authorization", "Bearer "+token)
})

auth.GET("/restricted").
	Expect().
	Status(http.StatusOK)

e.GET("/restricted").
	Expect().
	Status(http.StatusUnauthorized)
Reusable matchers
e := httpexpect.Default(t, "http://example.com")

// every response should have this header
m := e.Matcher(func (resp *httpexpect.Response) {
	resp.Header("API-Version").NotEmpty()
})

m.GET("/some-path").
	Expect().
	Status(http.StatusOK)

m.GET("/bad-path").
	Expect().
	Status(http.StatusNotFound)
Request transformers
e := httpexpect.Default(t, "http://example.com")

myTranform := func(r* http.Request) {
	// modify the underlying http.Request
}

// apply transformer to a single request
e.POST("/some-path").
	WithTransformer(myTranform).
	Expect().
	Status(http.StatusOK)

// create a builder that applies transfromer to every request
myBuilder := e.Builder(func (req *httpexpect.Request) {
	req.WithTransformer(myTranform)
})

myBuilder.POST("/some-path").
	Expect().
	Status(http.StatusOK)
Shared environment
e := httpexpect.Default(t, "http://example.com")

t.Run("/users", func(t *testing.T) {
	obj := e.GET("/users").
		Expect().
		Status(http.StatusOK).JSON().Object()

	// store user id for next tests
	userID := obj.Path("$.users[1].id").String().Raw()
	e.Env().Put("user1.id", userID)
})

t.Run("/user/{userId}", func(t *testing.T) {
	// read user id from previous tests
	userID := e.Env().GetString("user1.id")

	e.GET("/user/{userId}").
		WithPath("userId", userID)
		Expect().
		Status(http.StatusOK)
})
Custom config
e := httpexpect.WithConfig(httpexpect.Config{
	// include test name in failures (optional)
	TestName: t.Name(),

	// prepend this url to all requests
	BaseURL: "http://example.com",

	// use http.Client with a cookie jar and timeout
	Client: &http.Client{
		Jar:     httpexpect.NewCookieJar(),
		Timeout: time.Second * 30,
	},

	// use fatal failures
	Reporter: httpexpect.NewRequireReporter(t),

	// print all requests and responses
	Printers: []httpexpect.Printer{
		httpexpect.NewDebugPrinter(t, true),
	},
})
Use HTTP handler directly
// invoke http.Handler directly using httpexpect.Binder
var handler http.Handler = myHandler()

e := httpexpect.WithConfig(httpexpect.Config{
	// prepend this url to all requests, required for cookies
	// to be handled correctly
	BaseURL: "http://example.com",
	Reporter: httpexpect.NewAssertReporter(t),
	Client: &http.Client{
		Transport: httpexpect.NewBinder(handler),
		Jar:       httpexpect.NewCookieJar(),
	},
})

// invoke fasthttp.RequestHandler directly using httpexpect.FastBinder
var handler fasthttp.RequestHandler = myHandler()

e := httpexpect.WithConfig(httpexpect.Config{
	// prepend this url to all requests, required for cookies
	// to be handled correctly
	BaseURL: "http://example.com",
	Reporter: httpexpect.NewAssertReporter(t),
	Client: &http.Client{
		Transport: httpexpect.NewFastBinder(handler),
		Jar:       httpexpect.NewCookieJar(),
	},
})
Per-request client or handler
e := httpexpect.Default(t, server.URL)

client := &http.Client{
	Transport: &http.Transport{
		DisableCompression: true,
	},
}

// overwrite client
e.GET("/path").WithClient(client).
	Expect().
	Status(http.StatusOK)

// construct client that invokes a handler directly and overwrite client
e.GET("/path").WithHandler(handler).
	Expect().
	Status(http.StatusOK)
WebSocket dialer
// invoke http.Handler directly using websocket.Dialer
var handler http.Handler = myHandler()

e := httpexpect.WithConfig(httpexpect.Config{
	BaseURL:         "http://example.com",
	Reporter:        httpexpect.NewAssertReporter(t),
	WebsocketDialer: httpexpect.NewWebsocketDialer(handler),
})

// invoke fasthttp.RequestHandler directly using websocket.Dialer
var handler fasthttp.RequestHandler = myHandler()

e := httpexpect.WithConfig(httpexpect.Config{
	BaseURL:         "http://example.com",
	Reporter:        httpexpect.NewAssertReporter(t),
	WebsocketDialer: httpexpect.NewFastWebsocketDialer(handler),
})
Session support
// cookie jar is used to store cookies from server
e := httpexpect.WithConfig(httpexpect.Config{
	Reporter: httpexpect.NewAssertReporter(t),
	Client: &http.Client{
		Jar: httpexpect.NewCookieJar(), // used by default if Client is nil
	},
})

// cookies are disabled
e := httpexpect.WithConfig(httpexpect.Config{
	Reporter: httpexpect.NewAssertReporter(t),
	Client: &http.Client{
		Jar: nil,
	},
})
TLS support
// use TLS with http.Transport
e := httpexpect.WithConfig(httpexpect.Config{
	Reporter: httpexpect.NewAssertReporter(t),
	Client: &http.Client{
		Transport: &http.Transport{
			TLSClientConfig: &tls.Config{
				// accept any certificate; for testing only!
				InsecureSkipVerify: true,
			},
		},
	},
})

// use TLS with http.Handler
e := httpexpect.WithConfig(httpexpect.Config{
	Reporter: httpexpect.NewAssertReporter(t),
	Client: &http.Client{
		Transport: &httpexpect.Binder{
			Handler: myHandler,
			TLS:     &tls.ConnectionState{},
		},
	},
})
Proxy support
e := httpexpect.WithConfig(httpexpect.Config{
	Reporter: httpexpect.NewAssertReporter(t),
	Client: &http.Client{
		Transport: &http.Transport{
			Proxy: http.ProxyURL("http://proxy.example.com"),
		},
	},
})
Global time-out/cancellation
handler := FruitsHandler()

server := httptest.NewServer(handler)
defer server.Close()

ctx, cancel := context.WithCancel(context.Background())

e := WithConfig(Config{
	BaseURL:  server.URL,
	Reporter: httpexpect.NewAssertReporter(t),
	Context:  ctx,
})

go func() {
	time.Sleep(time.Duration(5)*time.Second)
	cancel()
}()

e.GET("/fruits").
	Expect().
	Status(http.StatusOK)
Per-request time-out/cancellation
// per-request context
e.GET("/fruits").
	WithContext(context.TODO()).
	Expect().
	Status(http.StatusOK)

// per-request timeout
e.GET("/fruits").
	WithTimeout(time.Duration(5)*time.Second).
	Expect().
	Status(http.StatusOK)

// timeout combined with retries (timeout applies to each try)
e.POST("/fruits").
	WithMaxRetries(5).
	WithTimeout(time.Duration(10)*time.Second).
	Expect().
	Status(http.StatusOK)
Support for aliases in failure messages
// when the tests fails, assertion path in the failure message is:
//   Request("GET").Expect().JSON().Array().IsEmpty()
e.GET("/fruits").
	Expect().
	Status(http.StatusOK).JSON().Array().IsEmpty()


// assign alias "fruits" to the Array variable
fruits := e.GET("/fruits").
	Expect().
	Status(http.StatusOK).JSON().Array().Alias("fruits")

// assertion path in the failure message is now:
//   fruits.IsEmpty()
fruits.IsEmpty()
Printing requests and responses
// print requests in short form, don't print responses
e := httpexpect.WithConfig(httpexpect.Config{
	Reporter: httpexpect.NewAssertReporter(t),
	Printers: []httpexpect.Printer{
		httpexpect.NewCompactPrinter(t),
	},
})

// print requests as curl commands that can be inserted into terminal
e := httpexpect.WithConfig(httpexpect.Config{
	Reporter: httpexpect.NewAssertReporter(t),
	Printers: []httpexpect.Printer{
		httpexpect.NewCurlPrinter(t),
	},
})

// print requests and responses in verbose form
// also print all incoming and outgoing websocket messages
e := httpexpect.WithConfig(httpexpect.Config{
	Reporter: httpexpect.NewAssertReporter(t),
	Printers: []httpexpect.Printer{
		httpexpect.NewDebugPrinter(t, true),
	},
})
Customize failure formatting
// customize formatting options
e := httpexpect.WithConfig(httpexpect.Config{
	Reporter:  httpexpect.NewAssertReporter(t),
	Formatter: &httpexpect.DefaultFormatter{
		DisablePaths: true,
		DisableDiffs: true,
		FloatFormat:  httpexpect.FloatFormatScientific,
		ColorMode:    httpexpect.ColorModeNever,
		LineWidth:    80,
	},
})

// customize formatting template
e := httpexpect.WithConfig(httpexpect.Config{
	Reporter:  httpexpect.NewAssertReporter(t),
	Formatter: &httpexpect.DefaultFormatter{
		SuccessTemplate: "...",
		FailureTemplate: "...",
		TemplateFuncs:   template.FuncMap{ ... },
	},
})

// provide custom formatter
e := httpexpect.WithConfig(httpexpect.Config{
	Reporter:  httpexpect.NewAssertReporter(t),
	Formatter: &MyFormatter{},
})
Customize assertion handling
// enable printing of succeeded assertions
e := httpexpect.WithConfig(httpexpect.Config{
	AssertionHandler: &httpexpect.DefaultAssertionHandler{
		Formatter: &httpexpect.DefaultFormatter{},
		Reporter:  httpexpect.NewAssertReporter(t),
		Logger:    t, // specify logger to enable printing of succeeded assertions
	},
})

// provide custom assertion handler
// here you can implement custom handling of succeeded and failed assertions
// this may be useful for integrating httpexpect with other testing libs
// if desired, you can completely ignore builtin Formatter, Reporter, and Logger
e := httpexpect.WithConfig(httpexpect.Config{
	AssertionHandler: &MyAssertionHandler{},
})

Similar packages

License

MIT

# Packages

# Functions

Default returns a new Expect instance with default config.
Deprecated: use Default instead.
NewArray returns a new Array instance.
NewArrayC returns a new Array instance with config.
NewAssertReporter returns a new AssertReporter object.
NewBinder returns a new Binder given a http.Handler.
NewBoolean returns a new Boolean instance.
NewBooleanC returns a new Boolean instance with config.
NewCompactPrinter returns a new CompactPrinter given a logger.
NewCookie returns a new Cookie instance.
NewCookieC returns a new Cookie instance with config.
NewCookieJar returns a new http.CookieJar.
NewCurlPrinter returns a new CurlPrinter given a logger.
NewDateTime returns a new DateTime instance.
NewDateTimeC returns a new DateTime instance with config.
NewDebugPrinter returns a new DebugPrinter given a logger and body flag.
NewDuration returns a new Duration instance.
NewDurationC returns a new Duration instance with config.
NewEnvironment returns a new Environment.
NewEnvironmentC returns a new Environment with config.
NewFastBinder returns a new FastBinder given a fasthttp.RequestHandler.
NewFastWebsocketDialer produces new websocket.Dialer which dials to bound fasthttp.RequestHandler without creating a real net.Conn.
NewFatalReporter returns a new FatalReporter object.
Deprecated: use NewCookieJar instead.
NewMatch returns a new Match instance.
NewMatchC returns a new Match instance with config.
NewNumber returns a new Number instance.
NewNumberC returns a new Number instance with config.
NewObject returns a new Object instance.
NewObjectC returns a new Object instance with config.
NewPanicReporter returns a new PanicReporter object.
Deprecated: use NewRequestC instead.
NewRequestC returns a new Request instance.
NewRequireReporter returns a new RequireReporter object.
NewResponse returns a new Response instance.
NewResponse returns a new Response instance with config.
NewString returns a new String instance.
NewStringC returns a new String instance with config.
NewValue returns a new Value instance.
NewValueC returns a new Value instance with config.
Deprecated: use NewWebsocketC instead.
NewWebsocketC returns a new Websocket instance.
NewWebsocketDialer produces new websocket.Dialer which dials to bound http.Handler without creating a real net.Conn.
NewWebsocketMessage returns a new WebsocketMessage instance.
NewWebsocketMessageC returns a new WebsocketMessage instance with config.
WithConfig returns a new Expect instance with custom config.

# Constants

Check expression: [Actual] belongs to list [Expected] [Expected] stores AssertionList with allowed values.
Check expression: [Actual] contains element [Expected].
Check expression: [Actual] contains key [Expected].
Check expression: [Actual] contains subset [Expected].
Check expression: [Actual] is empty.
Check expression: [Actual] is equal to [Expected] If [Delta] is set, it specifies allowed difference between values.
Check expression: [Actual] >= [Expected].
Check expression: [Actual] > [Expected].
Check expression: [Actual] belongs to inclusive range [Expected] [Expected] stores AssertionRange with Min and Max values.
Check expression: [Actual] <= [Expected].
Check expression: [Actual] < [Expected].
Check expression: [Actual] matches format [Expected] [Expected] stores expected format or format list (AssertionList).
Check expression: [Actual] matches json path [Expected] [Expected] stores a string with json path.
Check expression: [Actual] matches regex [Expected] [Expected] stores a string with regular expression.
Check expression: [Actual] matches json schema [Expected] [Expected] stores map with parsed schema or string with schema uri.
Check expression: [Actual] is nil.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
go:generate stringer -type=AssertionType.
Check if the operation succeeded.
Check expression: [Actual] has appropriate type.
Check if the invocation is correct.
Check expression: [Actual] has valid value.
Unconditionally enable colors.
Automatically enable colors if ALL of the following is true: - stdout is a tty / console - AssertionHandler is known to output to testing.T - testing.Verbose() is true Colors are forcibly enabled if FORCE_COLOR environment variable is set to a positive integer.
Unconditionally disable colors.
Separate using apostrophe.
Separate using comma.
Do not separate.
Separate using underscore.
DontFollowRedirects forbids following any redirects.
DontRetry disables retrying at all.
Print floats in scientific notation for large exponents, otherwise print in decimal notation.
Always print floats in decimal notation.
Always print floats in scientific notation.
FollowAllRedirects allows following any redirects, including those which require resending body.
FollowRedirectsWithoutBody allows following only redirects which don't require resending body.
RetryAllErrors enables retrying of any error or 4xx/5xx status code.
Deprecated: use RetryTimeoutAndServerErrors instead.
Deprecated: use RetryTimeoutErrors instead.
RetryTimeoutAndServerErrors enables retrying of network timeout errors, as well as 5xx status codes.
RetryTimeoutErrors enables retrying of timeout errors.
This assertion failure should mark current test as failed.
This assertion failure is informational only, it can be logged, but should not cause test failure.
Compact format.
Don't print stacktrace.
Standard, verbose format.
Status1xx defines "Informational" status codes.
Status2xx defines "Success" status codes.
Status3xx defines "Redirection" status codes.
Status4xx defines "Client Error" status codes.
Status5xx defines "Server Error" status codes.

# Structs

Array provides methods to inspect attached []interface{} object (Go representation of JSON array).
AssertionContext provides context where the assetion happened.
AssertionFailure provides detailed information about failed assertion.
AssertionRange holds inclusive range for allowed values.
AssertionValue holds expected or actual value.
AssertReporter implements Reporter interface using `testify/assert' package.
Binder implements networkless http.RoundTripper attached directly to http.Handler.
Boolean provides methods to inspect attached bool value (Go representation of JSON boolean).
CompactPrinter implements Printer.
Config contains various settings.
ContentOpts define parameters for matching the response content parameters.
Cookie provides methods to inspect attached http.Cookie value.
CurlPrinter implements Printer.
DateTime provides methods to inspect attached time.Time value.
DebugPrinter implements Printer and WebsocketPrinter.
DefaultAssertionHandler is default implementation for AssertionHandler.
DefaultFormatter is the default Formatter implementation.
DefaultRequestFactory is the default RequestFactory implementation which just calls http.NewRequest.
Duration provides methods to inspect attached time.Duration value.
Environment provides a container for arbitrary data shared between tests.
Expect is a toplevel object that contains user Config and allows to construct Request objects.
FastBinder implements networkless http.RoundTripper attached directly to fasthttp.RequestHandler.
FatalReporter is a struct that implements the Reporter interface and calls t.Fatalf() when a test fails.
FormatData defines data passed to template engine when DefaultFormatter formats assertion.
Match provides methods to inspect attached regexp match results.
Number provides methods to inspect attached float64 value (Go representation of JSON number).
Object provides methods to inspect attached map[string]interface{} object (Go representation of JSON object).
PanicReporter is a struct that implements the Reporter interface and panics when a test fails.
Request provides methods to incrementally build http.Request object, send it, and receive response.
RequireReporter implements Reporter interface using `testify/require' package.
Response provides methods to inspect attached http.Response object.
Stacktrace entry.
String provides methods to inspect attached string value (Go representation of JSON string).
Value provides methods to inspect attached interface{} object (Go representation of arbitrary JSON value) and cast it to concrete type.
Websocket provides methods to read from, write into and close WebSocket connection.
WebsocketMessage provides methods to inspect message read from WebSocket connection.

# Interfaces

AssertionHandler takes care of formatting and reporting test Failure or Success.
Client is used to send http.Request and receive http.Response.
Formatter is used to format assertion messages into strings.
Logger is used as output backend for Printer.
Deprecated: use TestingTB instead.
Printer is used to print requests and responses.
Reporter is used to report failures.
RequestFactory is used to create all http.Request objects.
TestingTB is a subset of testing.TB interface used by httpexpect.
WebsocketConn is used by Websocket to communicate with actual WebSocket connection.
WebsocketDialer is used to establish websocket.Conn and receive http.Response of handshake result.
WebsocketPrinter is used to print writes and reads of WebSocket connection.

# Type aliases

AssertionList holds list of allowed values.
AssertionSeverity defines how assertion failure should be treated.
AssertionType defines type of performed assertion.
ClientFunc is an adapter that allows a function to be used as the Client Example: e := httpexpect.WithConfig(httpexpect.Config{ Client: httpextect.ClientFunc( func(req *http.Request) (*http.Response, error) { // client code here }), }).
ColorMode defines how the text color is enabled.
DigitSeparator defines the separator used to format integers and floats.
FloatFormat defines the format in which all floats are printed.
LoggerFunc is an adapter that allows a function to be used as the Logger Example: e := httpexpect.WithConfig(httpexpect.Config{ Printers: []httpexpect.Printer{ httpexpect.NewCompactPrinter( httpextect.LoggerFunc( func(fmt string, args ...interface{}) { // logger code here })), }, }).
RedirectPolicy defines how redirection responses are handled.
ReporterFunc is an adapter that allows a function to be used as the Reporter Example: e := httpexpect.WithConfig(httpexpect.Config{ Reporter: httpextect.ReporterFunc( func(message string, args ...interface{}) { // reporter code here }), }).
RequestFactoryFunc is an adapter that allows a function to be used as the RequestFactory Example: e := httpexpect.WithConfig(httpexpect.Config{ RequestFactory: httpextect.RequestFactoryFunc( func(method string, url string, body io.Reader) (*http.Request, error) { // factory code here }), }).
RetryPolicy defines how failed requests are retried.
StacktraceMode defines the format of stacktrace.
StatusRange is enum for response status ranges.
WebsocketDialerFunc is an adapter that allows a function to be used as the WebsocketDialer Example: e := httpexpect.WithConfig(httpexpect.Config{ WebsocketDialer: httpextect.WebsocketDialerFunc( func(url string, reqH http.Header) (*websocket.Conn, *http.Response, error) { // dialer code here }), }).