Changing where this check occurs comes down to a choice between:

1. error that the message was not received.
2. error that the expectation was invalid.

The current implementation gives 2, I believe you are suggesting 1. To me, 2 is more of a "type check" so should take precedence. Put another way "your code is nonsensical" trumps "your code does not behave as expected". Unless there is another benefit I'm not seeing.