This is a popular issue, well-known for being a culprit for many flaky tests.
In most cases it’s wrong to rely on order of elements in a Slice
.
response := m.RetreieveAll()
// Expect MessengerResponse to have 2 messages
require.Len(t, 2, response.Messages())
// WRONG: Relying on order of elements in a slice
require.Equal(t, response.Messages()[0], "id-1")
require.Equal(t, response.Messages()[1], "id-2")
// CORRECT: Private response.messages property is a map, use it
require.Contains(t, repsonse.messages, "id-1")
require.Contains(t, repsonse.messages, "id-2")
Example PR with a fix:
Use require.ElementsMatch
to compare slices ignoring the order of elements.