Custom WP_Query with no posts to output

Empty argument here does not equal logical in nothing. It equals no value to process and so WP ignores it and goes further as usual.

Just wrap your query in if( !empty( $favorites) ) condition.