Description

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:

Fix

Use require.ElementsMatch to compare slices ignoring the order of elements.