32
TEST-DRIVEN DEVELOPMENT – TEORIJA I PRIMJERI DRAGOŠ STRUGAR

Testing and TDD - Laravel and Express Examples

Embed Size (px)

Citation preview

Page 1: Testing and TDD - Laravel and Express Examples

TEST-DRIVEN DEVELOPMENT – TEORIJA I PRIMJERIDRAGOŠ STRUGAR

Page 2: Testing and TDD - Laravel and Express Examples

O MENI

Dragoš Strugar

još u srednjoj

najviše istražujem iOS i backend development

Osvojio Hackathon 2016 Banjaluka

idem na takmičenja inovacija u ZG, BL i NS

Page 3: Testing and TDD - Laravel and Express Examples

O ČEMU OVA PREZENTACIJA NIJE

vrste testiranja

potpun tutorijal kako koristiti TDD u Laravelu i Expressu

nije za developere koji su već radili dosta sa TDDom, mada i oni možda nešto nauče

Page 4: Testing and TDD - Laravel and Express Examples

PRIJE NEGO ŠTO KAŽEM O ČEMU JE ZAPRAVO OVA PREZENTACIJA..

Šta je Unit testing?

Kako se ta vrsta testiranja razlikuje od ostalih vrsta testova?

Zašto ovo pominjem?

Page 5: Testing and TDD - Laravel and Express Examples

O ČEMU JE OVA PREZENTACIJA

UNIT testing, programerski testovi

Automatizovano testiranje

Razumijevanje TDD i Unit testing osnovnih pojmova

Par primjera ovoga u Express.js i Laravel frameworcima

Page 6: Testing and TDD - Laravel and Express Examples

PAR PITANJA

Koliko vas misli da je pisanje testova manje ili veće gubljenje vremena?

Koliko vas piše testove u svojim aplikacijama?

Koliko vas to radi TDD/BDD pristupom?

Page 7: Testing and TDD - Laravel and Express Examples

SVI TESTIRAJU…

Uđi na browser, posjeti localhost/posts, vidi jesu li svi postovi izlistani

Uđi u konzolu, vidi jesi li uspješno sačuvao/la novi post?

itd..

Page 8: Testing and TDD - Laravel and Express Examples

…SAMO NEKI TO AUTOMATIZUJU

napišu kod koji to provjeri za njih

razmislite koliko bi vam to vremena uštedjelo

dodamo novi feature za postove, samo izvrtimo testove da vidimo da li i dalje prolaze

ne moramo tokom noći se pitati da li naš kod radi, ili ima neki bug, samo testiramo prije spavanja, easy..

Page 9: Testing and TDD - Laravel and Express Examples

ZA NEKE SLUČAJEVE OVO JE SASVIM DOVOLJNO

recimo, hoćete dodati novi feature u vašu app koji ima baš mnogo slučajeva koji se trebaju provjeriti

vaša app nije prevelika, niste testirali ništa u njoj, ali ovaj feature baš liči na nešto što bi se trebalo testirati

napišete testove samo za tu funkcionalnost

Page 10: Testing and TDD - Laravel and Express Examples

ALI, ZA VEĆINU NIJE..

imate app koja je poprilično velika ima mnogo koda i mnogo slučajeva koji se trebaju testirati kad dodate novu funkcionalnost, ona možda sruši neki feature rađen prije.. Full code coverage!

Page 11: Testing and TDD - Laravel and Express Examples

ŠTA TESTIRANJEM DOBIJATE?

software koji nema bugova aplikaciju koja je spremna za produkciju developersku sreću jer znate da ste odradili

software kako treba DEVOPS

Page 12: Testing and TDD - Laravel and Express Examples

OVDJE STVARI POČINJU DA BUDU ZANIMLJIVE :D

hajdemo zamisliti scenario u kojem bismo napisali prvo testove, a tek onda naš kod? Čekaj, mali, jesi ti normalan?

Zar to ne bi značilo da naši testovi uvijek prvo padaju?

Page 13: Testing and TDD - Laravel and Express Examples

I ODGOVOR JE..

DA!- pravićemo objekat, čak ako nemamo još napisanu klasu

- zvaćemo metodu koja ne postojii kad testove izvršimo, oni trebaju PASTI

Page 14: Testing and TDD - Laravel and Express Examples

AKO STE SHVATILI POGREŠNO…

pisanje čitavog test koda prije pisanja jedne linije ”pravog” koda mart – pisanje testova april – pisanje koda koji prolazi testiranje

POGREŠNO!

Page 15: Testing and TDD - Laravel and Express Examples

HAJDEMO PROMISLITI I NA DRUGI NAČIN

test-driven znamo smjer u kojem trebamo razvijati našu aplikaciju u procesu razvoja, znamo TAČNO gdje se pojavljuju greške RED Green možda ovaj pristup i nije toliko loš..

Page 16: Testing and TDD - Laravel and Express Examples

RED-GREEN-REFACTOR

Page 17: Testing and TDD - Laravel and Express Examples

DOSTA TEORIJE, LET’S GET OUR HANDS DIRTY!

koristimo frameworke za testiranje: PHPUnit – PHP JS – Mocha (Backend JavaScript here, folks) JUnit - Java NUnit - .NET PyUnit – Python CppUnit – C++

Page 18: Testing and TDD - Laravel and Express Examples

LARAVEL TDD UVOD

nisam ekspert, ako neko vidi neku grešku u Laravel kodu, neka me slobodno prekine sve vam je built-in Hajdemo uzeti primjer pravljenja klase Movie koristeći TDD

Page 19: Testing and TDD - Laravel and Express Examples

MOVIE TEST- LARAVEL

- pravimo Movie.php sa običnim <?php class Movie{}- u tests/ direktorijumu pravimo novi fajl, MovieTest.php

Page 20: Testing and TDD - Laravel and Express Examples

IZVRŠAVANJE TESTA - LARAVEL

u rootu projekta kucate phpunit i dodatni argument može biti path do samo jednog testa, ili direktorijuma u kom se nalazi više testova

Dobićemo Test failed - PHP Fatal Error: ’App\Movie’ not found Ako u Movie.php dodamo namespace App i izvršimo testove, dobijamo drugi error: Call to undefined method App\Movie::name()

Page 21: Testing and TDD - Laravel and Express Examples

LARAVEL MOVIE CLASS

Ako dodamo metodu name, pomoću public function name(){} Dobijamo sljedeći error:

Failed asserting that null matches expected ’Star Wars’

Page 22: Testing and TDD - Laravel and Express Examples

VRIJEME ZA PITANJA - LARAVEL

kako biste dodali pored imena filma, njegovog režisera (bonus poeni ako znate ko je to)?

zapažate li problem koji će nam se desiti?

setUp method! DRY, guys

public function setUp() {$this->movie = new Movie(‘Star Wars’ , ‘George Lucas’);}

Page 23: Testing and TDD - Laravel and Express Examples

LARAVEL - WEB

za request/response je sve built in, pogledajmo primjer

Page 24: Testing and TDD - Laravel and Express Examples

PRIMJER NOVI U LARAVELU

Posjetiti home page $this->visit(‘/’);

Klikni na Click Me link $this->click(‘Click Me’); Dodati <a href=”#”>Click Me</a>

Vidi ima li poruka ”Clicked” $this->see(‘Clicked’); Prepraviti link da bude href=“/feedback” -> dobijamo 404 Dodati rutu /feeback koja vraća poruku “Clicked”

Vidi da li je trenutni url /feedback $this->seePageIs(‘feedback’);

Page 25: Testing and TDD - Laravel and Express Examples

EXPRESS SADA…

mochajs.org – asynchronous testing assertion library expect – eror poruke i mnoge druge pogodnosti supertest – za requeste (GET, POST, …) – ne moramo manualno provjeravati headere,

status codove i sl.

Page 26: Testing and TDD - Laravel and Express Examples

TEST DRIVE IN EXPRESS

Za ovaj primjer će nam trebati express, mocha, supertest i expect od NPM paketa Jedan fajl za server i jedan za test server.js i server.test.js napravimo u package.json alias

"scripts": {        "test": "mocha **/*.test.js"    },

Page 27: Testing and TDD - Laravel and Express Examples

TEST FAJL PRVO

Page 28: Testing and TDD - Laravel and Express Examples

NAKON

ako odradimo npm test, dobijamo

Page 29: Testing and TDD - Laravel and Express Examples

AKO DODAMO SERVER.JS STVARI

Page 30: Testing and TDD - Laravel and Express Examples

PASS!

Page 31: Testing and TDD - Laravel and Express Examples

RESURSI ZA UČENJE

Laravel - PHPUnit: https://phpunit.de/ Express – Supertest/Mocha/Expect su na NPM, svi open-source https://github.com/visionmedia/supertest

Za Laravel preporučujem od Laracasts Testing sekciju Za Express ne znam takav kurs, ali ima mnogo blog postova..

Page 32: Testing and TDD - Laravel and Express Examples

HVALA NA PAŽNJIKONTAKT: FB.COM/DRAGIFY, [email protected]