Четвърто предизвикателство

  1. Здравейте,

    Четвъртото предизвикателство е публикувано. Примерен тест, както обикновено, можете да откриете в репото в Github.

    Питайте тук, ако има нещо неясно.

    Приятно решаване :grinning:!

    П.П. Надявам се този път да спазвате конвенциите за добър стил на кода...

  2. @Алекс, https://www.relishapp.com/rspec/rspec-expectations/v/2-6/docs/built-in-matchers/raise-error-matcher, осмисли написаното там, и пиши ако (не) ти е станало ясно :)

    Замисли се все пак дали това е подходящото поведение на partition, когато му е подаден отрицателен аргумент.

  3. @Петко - мерси за линка, явно това е просто ситнаксиса на rspec 2. Въпросът ми се поради от факта, че на някои места видях варианта в should, но там си беше казано, че това е за rspec 1. Иначе за поведението - ползвал съм ArgumentError със стринг, но не исках да поствам прекалено конкретно, че нали не е изтекъл срока. Според мен е коректно да raise-ва error/exception (не знам все още каква точно е разликата м/у двете и кога кое се ползва), защото по дефиниця естествени числа са или всички положителни цели числа или всички не-отрицателни цели числа. Подавайки му отрицателно число подаваш грешен аргумент.

  4. Искам да допълня казаното от Петко - налага се да сложите в блок кода, който искате да проверите, че хвърля изключение. Това не е просто синтаксис.

    Въпреки, че за изключения все още не сме говорили, обяснението е много просто и се корени в реда на изпълнение на кода. Това:

    partition(-1).should raise_error
    

    ...няма да работи, просто защото извикваш should на резултата от изпълнението на partition(-1). Тоест, още преди да си казал should, partition е извикан и е предизвикал изкючение, заради което и тестът ти ще гръмне.

    Затова пък тук expect се възползва от блоковете в Руби, за да отложи изпълнението на парче код. Кодът се парсва и се вика to на резултата от изпълнението на expect. Блокът се изпълнява със закъснение, като е обгърнат с клаузи, които прихващат определени изключения:

    expect { partition(-10) }.to raise_error
    

Трябва да сте влезли в системата, за да може да отговаряте на теми.