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.