Искам да допълня казаното от Петко - налага се да сложите в блок кода, който искате да проверите, че хвърля изключение. Това не е просто синтаксис.
Въпреки, че за изключения все още не сме говорили, обяснението е много просто и се корени в реда на изпълнение на кода. Това:
partition(-1).should raise_error
...няма да работи, просто защото извикваш should
на резултата от изпълнението на partition(-1)
. Тоест, още преди да си казал should
, partition
е извикан и е предизвикал изкючение, заради което и тестът ти ще гръмне.
Затова пък тук expect
се възползва от блоковете в Руби, за да отложи изпълнението на парче код. Кодът се парсва и се вика to
на резултата от изпълнението на expect
. Блокът се изпълнява със закъснение, като е обгърнат с клаузи, които прихващат определени изключения:
expect { partition(-10) }.to raise_error