Ok, after a few hours wasted, I found the root cause. When an async code is tested by .toThrow() matcher, the exception being thrown must be extending Error. The relevant issue is here: https://github.com/jestjs/jest/issues/12024