The .catch() handler on a rejected promise resolves on the second microtask tick, not the first — one extra await Promise.resolve() is needed before the assertion. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>