Member-only story
What is Async Test Pollution ?
The Hidden Saboteur in My Test Suite
Let me tell you a short story from my last week.
I was reviewing a feature, feeling confident about my test coverage. All tests passed individually. Perfect. I ran the entire suite before merging. Suddenly — boom, a crash. Different test. Rerun. Another crash elsewhere. At first glance, everything seemed unrelated.
That’s when I revisited an old enemy: async test pollution.
What Is Async Test Pollution?
In simple terms, it happens when an asynchronous operation from one test leaks into another test. Tests that are supposed to be isolated suddenly share side effects, creating hidden dependencies and random failures.
Imagine this flow:
TestCase.setUp()
TestCase.testA() // Starts an async operation
TestCase.tearDown() // Ends before async finishesTestCase.setUp()
TestCase.testB() // Runs while Test A’s async is still alive
TestCase.tearDown()The async task from testA wakes up in the middle of testB, accessing deallocated or unexpected state. 💥 Crash.
My Crash Case
Here’s a real snippet from my tests:
