testify
testify copied to clipboard
Add function for supporting JSON equality checks using byte slices
Summary
This PR adds a new function into the assert
package, JSONEqBytes
, that does the same as JSONEq
, but by receiving []byte
values as parameter instead of string
ones.
Changes
assert/assertions.go
:
The implementation of JSONEqBytes
is pretty much what was in JSONEq
, but having it receive []byte
values and then not needing to convert these values to []byte
when calling json.Unmarshal
inside it.
Then, the implementation of JSONEq
was changed such that it just calls JSONEqBytes
by converting its original arguments to []byte
values (which it already did when calling json.Unmarshal
)
assert/assertions_test.go
:
Tests for JSONEqBytes
function were replicated from the tests from JSONEq
.
Motivation
It is common in Go to store JSON text in []byte
variables instead of string
values, so having a function that allows to receive these values when doing JSON-equality checks without having to cast them to string can be useful.
Maybe not as important, it would also avoid unnecessary []byte
-to-string
conversions, which could add up when dealing with big JSON payloads.
Example of usage:
package main
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestJSONFiles(t *testing.T) {
actualFile := "/path/to/file.json"
byteValue, err := ioutil.ReadAll(jsonFile)
require.NoError(t, err)
expectedContentsFile := "/path/to/expected.json"
byteValue, err = ioutil.ReadAll(jsonFile)
require.NoError(t, err)
assert.JSONEqBytes(t, expected, byteValue)
}
Hi !
this one is great but I think currently maintainers are more focused in fixing bugs rather than expanding the API interface.
Let's wait their response