TDD
Czyli coś co chyba każdy z nas robi – a przynajmniej powinien! Kto słyszał o PHPUnit? Albo o PHPSpec? A może Codeception? To dobre i sprawdzone narzędzia które mają jednak swoje minusy. Dzisiaj chcę wam zaprezentować całkiem świeże narzędzie – Kahlan.
Co to kurcze jest?
Jest to kolejny framework do pisania testów. Czym się różni od poprzednich? Na pewno składnią. Czy znacie RSpec albo jasmine? Tutaj mamy bardzo podobną implementację dla PHP, a więc używamy describe-it. Jest to cholernie wygodne i łatwe do zrozumienia. Chcecie przykład*?
<?php describe("Example", function() { it("makes an expectation", function() { expect(true)->toBe(true); }); it("expects methods to be called", function() { $user = new User(); expect($user)->toReceive('save')->with(['validates' => false]); $user->save(['validates' => false]); }); it("stubs a function", function() { allow('time')->toBeCalled()->andReturn(123); $user = new User(); expect($user->save())->toBe(true) expect($user->created)->toBe(123); }); it("stubs a class", function() { allow('PDO')->toReceive('prepare', 'fetchAll')->andReturn([['name' => 'bob']]); $user = new User(); expect($user->all())->toBe([['name' => 'bob']]); }); });
Prawda że przyjemne? Teraz swój kod testuje wyłącznie tym narzędziem. Dlaczego? Oto kilka powodów:
- działa praktycznie od razu, bez żadnej konfiguracji, wystarczy dodać go jako zależność do composer,
- posiada prosty i intuicyjny system do stubów,
- zezwala na monkey patching, a więc możemy każdą wbudowaną klasę / funkcję podmienić na własną,
- umożliwia zmodyfikowanie obiektu w locie,
- jest diabelnie szybki,
- daje komfort każdemu full stack developerowi pisania testów w tej samej składni dla front jak i back-end.
Czy ma jakieś minusy?
Oczywiście. Kahlan do działania wymaga ładowania klas poprzez autoloader composera, bez tego nie będziemy mogli użyć systemu stubów. To jedyny minus jaki mi teraz przychodzi do głowy. Autor bardzo szybko reaguje na wszelkie błędy zgłoszone poprzez GitHuba. Jest również bardzo otwarty na zmiany i sugestie. Wszystkie moje pull requesty były rozpatrzone w bardzo krótkim czasie (< 1h!).
Fajnie, podoba mi się
Świetnie, cieszę się. Więc jedyne co musisz teraz zrobić to
$ composer require --dev kahlan/kahlan
a następnie zacząć pisać swoje pierwsze testy! Polecam gorąco dokumentację projektu. Jest świetnie napisana i posiada dużo przykładów.
Dzięki!
A jak się podoba to podaj dalej / zostaw komentarz. Zapraszam również do regularnego czytania mojego bloga. W kolejnych postach planuje dokładniejszy opis Kahlana. I nie tylko :-).
Damian.
*Przykład z README – poprawiłem go bo był uszkodzony – tutaj pull request.