Expect(π¨πΌβπ»).To(Be(π))
expectto/be is a Golang package that offers a substantial collection of Be matchers. Every Be matcher is
compatible with both Ginkgo/Gomega
and Gomock. Where possible, arguments of matchers can be either finite values or
matchers (Be/Gomega/Gomock).
Employing expectto/be matchers enables you to create straightforward, readable, and maintainable unit or
integration tests in Golang. Tasks such as testing HTTP requests, validating JSON responses, and more become remarkably
comprehensive and straightforward.
Table of Contents
Installation
To use Be in your Golang project, simply import it:
import "github.com/expectto/be"
Example
Consider the following example demonstrating the usage of expectto/beβs HTTP request matchers:
req, err := buildRequestForServiceFoo()
Expect(err).To(Succeed())
// Matching an HTTP request
Expect(req).To(be_http.Request(
// Matching the URL
be_http.HavingURL(be_url.URL(
be_url.WithHttps(),
be_url.HavingHost("example.com"),
be_url.HavingPath("/path"),
be_url.HavingSearchParam("status", "active"),
be_url.HavingSearchParam("v", be_reflected.AsNumericString()),
be_url.HavingSearchParam("q", "Hello World"),
)),
// Matching the HTTP method
be_http.POST()
// Matching request's context
be_http.HavingCtx(be_ctx.Ctx(
be_ctx.WithDeadline(be_time.LaterThan(time.Now().Add(30*time.Minute))),
be_ctx.WithValue("foobar", 100),
)),
// Matching the request body using JSON matchers
be_http.HavingBody(
be_json.Matcher(
be_json.JsonAsReader,
be_json.HaveKeyValue("hello", "world"),
be_json.HaveKeyValue("n", be_reflected.AsInteger()),
be_json.HaveKeyValue("ids", be_reflected.AsSliceOf[string]),
be_json.HaveKeyValue("details", And(
be_reflected.AsObjects(),
be.HaveLength(2),
ContainElements(
be_json.HaveKeyValue("key", "foo"),
be_json.HaveKeyValue("key", "bar"),
),
)),
),
// Matching HTTP headers
be_http.HavingHeader("X-Custom", "Hey-There"),
be_http.HavingHeader("Authorization",
be_string.MatchTemplate("Bearer ",
be_string.Var("jwt",
be_jwt.Token(
be_jwt.Valid(),
be_jwt.HavingClaim("name", "John Doe"),
),
),
),
),
),
))
Matchers
Core Be
π¦ be provides a set of core matchers for common testing scenarios.
See detailed docs
Core matchers:
Always, Never, All, Any, Eq, Not, HaveLength, Dive, DiveAny, DiveFirst
be_reflected
π¦ be_reflected provides Be matchers that use reflection, enabling expressive assertions on valuesβ reflect kinds and
types.
See detailed docs
General Matchers based on reflect.Kind:
AsKind, AsFunc, AsChan, AsPointer, AsFinalPointer, AsStruct, AsPointerToStruct, AsSlice, AsPointerToSlice, AsSliceOf, AsMap, AsPointerToMap, AsObject, AsObjects, AsPointerToObject
Data Type Matchers based on reflect.Kind
AsString, AsBytes, AsNumeric, AsNumericString, AsInteger, AsIntegerString, AsFloat, AsFloatishString,
Interface Matchers based on reflect.Kind
AsReader,AsStringer
Matchers based on types compatibility:
AssignableTo, Implementing
be_math
π¦ be_math provides Be matchers for mathematical operations.
See detailed docs
Matchers on math:
GreaterThan, GreaterThanEqual, LessThan, LessThanEqual, Approx, InRange, Odd, Even, Negative, Positive, Zero, Integral, DivisibleBy
Shortcut aliases for math matchers:
Gt, Gte, Lt, Lte
be_string
π¦ be_string provides Be matchers for string-related assertions.
See detailed docs
Matchers on strings
NonEmptyString, EmptyString, Alpha, Numeric, AlphaNumeric, AlphaNumericWithDots, Float, Titled, LowerCaseOnly, MatchWildcard, ValidEmail
Template matchers
MatchTemplate
be_time
π¦ be_time provides Be matchers on time.Time.
See detailed docs
Time Matchers
LaterThan, LaterThanEqual, EarlierThan, EarlierThanEqual, Eq, Approx,
SameExactMilli, SameExactSecond, SameExactMinute, SameExactHour,
SameExactDay, SameExactWeekday, SameExactWeek, SameExactMonth,
SameSecond, SameMinute, SameHour, SameDay, SameYearDay,
SameWeek, SameMonth, SameYear, SameTimzone, SameOffset, IsDST
be_jwt
π¦ be_jwt provides Be matchers for handling JSON Web Tokens (JWT). It includes matchers for transforming and validating
JWT tokens. Matchers corresponds to specific
golang jwt implementation.
See detailed docs
Transformers for JWT matching:
TransformSignedJwtFromString, TransformJwtFromString
Matchers on JWT:
Token, Valid, HavingClaims, HavingClaim, HavingMethodAlg, SignedVia
be_url
π¦ be_url provides Be matchers on url.URL.
See detailed docs
Transformers for URL Matchers:
TransformUrlFromString, TransformSchemelessUrlFromString
URL Matchers:
URL, HavingHost, HavingHostname, HavingScheme, NotHavingScheme, WithHttps, WithHttp, HavingPort, NotHavingPort, HavingPath, HavingRawQuery, HavingSearchParam, HavingMultipleSearchParam, HavingUsername, HavingUserinfo, HavingPassword
be_ctx
π¦ be_ctx provides Be matchers on context.Context.
See detailed docs
Context Matchers:
Ctx, CtxWithValue, CtxWithDeadline, CtxWithError
be_json
π¦ be_json provides Be matchers for expressive assertions on JSON.
See detailed docs
JSON Matchers:
Matcher, HaveKeyValue
be_http
π¦ be_http provides Be matchers for expressive assertions on http.Request.
See detailed docs
Matchers on HTTP:
Request, HavingMethod,
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, CONNECT, TRACE,
HavingURL, HavingBody, HavingHost, HavingProto, HavingHeader, HavingHeaders
Contributing
Be welcomes contributions! Feel free to open issues, suggest improvements, or submit pull
requests. Contribution guidelines for this project
License
This project is licensed under the MIT License.