Pact Go uses a simple log utility (logutils) to filter log messages. The CLI already contains flags to manage this, should you want to control log level in your tests, you can set it like so:
SetLogLevel("trace")
You can also export LOG_LEVEL=trace
before running a test to increase verbosity.
Pact ships with a CLI that you can also use to check if the tools are up to date. Simply run pact-go check
- an exit status of 0
is good, 1
or higher is bad. pact-go install
will also do this, and also install any dependencies if missing.
You can also opt to have Pact automatically upgrade library version using the function CheckVersion()
.
Pact go from 2.0.0-beta-11 onwards, also stores a configuration file in ~/.pact/pact-go.yml
that contains the version information for the current libraries it manages. You should not edit this file, however it has a structure as follows:
libraries:
libpact_ffi:
libname: libpact_ffi
version: 0.3.2
hash: d6503769896eecbc027815d20aff19c3
Sometimes you want to target a specific test for debugging an issue or some other reason.
This is easy for the consumer side, as each consumer test can be controlled
within a valid *testing.T
function, however this is not possible for Provider verification.
But there is a way! Given an interaction that looks as follows (taken from the message examples):
message := pact.AddMessage()
message.
Given("user with id 127 exists").
ExpectsToReceive("a user").
WithMetadata(commonHeaders).
WithContent(map[string]interface{}{
"id": like(127),
"name": "Baz",
"access": eachLike(map[string]interface{}{
"role": term("admin", "admin|controller|user"),
}, 3),
}).
AsType(&types.User{})
and the function used to run provider verification is go test -run TestMessageProvider
, you can test the verification of this specific interaction by setting two environment variables PACT_DESCRIPTION
and PACT_PROVIDER_STATE
and re-running the command. For example:
cd examples/message/provider
PACT_DESCRIPTION="a user" PACT_PROVIDER_STATE="user with id 127 exists" go test -v .
Supply your own TLS configuration to customise the behaviour of the runtime:
_, err := pact.VerifyProvider(t, types.VerifyRequest{
ProviderBaseURL: "https://localhost:8080",
PactURLs: []string{filepath.ToSlash(fmt.Sprintf("%s/consumer-selfsignedtls.json", pactDir))},
CustomTLSConfig: &tls.Config{
RootCAs: getCaCertPool(), // Specify a custom CA pool
// InsecureSkipVerify: true, // Disable SSL verification altogether
},
})