I ended up adding a little util that catches the error and throws the custom message:
export async function expectToResolve(expected: Promise<any>, msg: string) {
try {
await expect(expected, "").resolves.toBeUndefined()
} catch {
throw new Error(msg)
}
}
It can be used like this:
await expectToResolve(promise, "custom message");