Это намеченное поведение. assert_raise
не проверяет, было ли вызвано исключение где-то при выполнении скрипта, он проверяет, вызывает ли блок необработанное исключение данного типа.
Другими словами, это работает, только если вы удалите оператор rescue
.