SlideShare a Scribd company logo
TEST-DRIVEN DEVELOPMENT – TEORIJA I PRIMJERI
DRAGOŠ STRUGAR
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
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
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?
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
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?
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..
…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..
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
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!
Š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
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?
I ODGOVOR JE..
DA!
- pravićemo objekat, čak ako nemamo još napisanu klasu
- zvaćemo metodu koja ne postoji
i kad testove izvršimo, oni trebaju PASTI
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!
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š..
RED-GREEN-REFACTOR
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++
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
MOVIE TEST- LARAVEL
- pravimo Movie.php sa običnim <?php class Movie{}
- u tests/ direktorijumu pravimo novi fajl, MovieTest.php
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: ’AppMovie’ not found
 Ako u Movie.php dodamo namespace App i izvršimo testove, dobijamo drugi error:
 Call to undefined method AppMovie::name()
LARAVEL MOVIE CLASS
 Ako dodamo metodu name, pomoću public function name(){}
 Dobijamo sljedeći error:
 Failed asserting that null matches expected ’Star Wars’
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’);}
LARAVEL - WEB
 za request/response je sve built in, pogledajmo primjer
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’);
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.
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"
},
TEST FAJL PRVO
NAKON
 ako odradimo npm test, dobijamo
AKO DODAMO SERVER.JS STVARI
PASS!
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..
HVALA NA PAŽNJI
KONTAKT: FB.COM/DRAGIFY, ITSDRAGOS@GMAIL.COM

More Related Content

PPTX
Getting bigger with flask
ODP
Presentation laravel 5 4
PDF
Digpen 7: Why choose Laravel?
PPTX
Testing with laravel
PPTX
Codeception
PPTX
Laravel Unit Testing
PDF
BDD + PHP = behat!
PDF
A guide to using eloquent orm in laravel ♥ scotch
Getting bigger with flask
Presentation laravel 5 4
Digpen 7: Why choose Laravel?
Testing with laravel
Codeception
Laravel Unit Testing
BDD + PHP = behat!
A guide to using eloquent orm in laravel ♥ scotch

Viewers also liked (15)

PPTX
Backend, MVC, languages and frameworks for Backend
PPTX
Laravel and SOLR
PDF
All the Laravel things: up and running to making $$
PDF
PHPUnit best practices presentation
PPTX
Test-Driven Development (TDD)
PDF
(Have a) rest with Laravel
PDF
Intro to Laravel PHP Framework
PDF
凌波微步:wagon + VS Code 的輕功哲學
PDF
Laravel 5.4
PPTX
Laravel Beginners Tutorial 1
PDF
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
PDF
DevOps叢林裡的小隊游擊戰術 (@ iThome DevOps 2015)
PDF
2015 Upload Campaigns Calendar - SlideShare
PPTX
What to Upload to SlideShare
PDF
Getting Started With SlideShare
Backend, MVC, languages and frameworks for Backend
Laravel and SOLR
All the Laravel things: up and running to making $$
PHPUnit best practices presentation
Test-Driven Development (TDD)
(Have a) rest with Laravel
Intro to Laravel PHP Framework
凌波微步:wagon + VS Code 的輕功哲學
Laravel 5.4
Laravel Beginners Tutorial 1
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
DevOps叢林裡的小隊游擊戰術 (@ iThome DevOps 2015)
2015 Upload Campaigns Calendar - SlideShare
What to Upload to SlideShare
Getting Started With SlideShare
Ad

Similar to Testing and TDD - Laravel and Express Examples (8)

PPTX
Testiranje projekata.pptx
PPTX
JS Belgrade Meetup #3: "Testiranje" by Bogdan Gavrilović
PDF
What is User Experience? What is User Testing?
PDF
T 4 testiranje softvera i upravljanje kvalitetom
PPSX
Decouple Goals
PDF
JavaCro'14 - Automatized testing with Selenium 2 – Juraj Ćutić and Aleksander...
PDF
ComTrade IT Solutions and Services letnja škola programiranja
PDF
2019 StartIT - Symfony i 12 factor arhitektura
Testiranje projekata.pptx
JS Belgrade Meetup #3: "Testiranje" by Bogdan Gavrilović
What is User Experience? What is User Testing?
T 4 testiranje softvera i upravljanje kvalitetom
Decouple Goals
JavaCro'14 - Automatized testing with Selenium 2 – Juraj Ćutić and Aleksander...
ComTrade IT Solutions and Services letnja škola programiranja
2019 StartIT - Symfony i 12 factor arhitektura
Ad

Testing and TDD - Laravel and Express Examples

  • 1. TEST-DRIVEN DEVELOPMENT – TEORIJA I PRIMJERI DRAGOŠ STRUGAR
  • 2. 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
  • 3. 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
  • 4. 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?
  • 5. 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
  • 6. 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?
  • 7. 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..
  • 8. …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..
  • 9. 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
  • 10. 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!
  • 11. Š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
  • 12. 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?
  • 13. I ODGOVOR JE.. DA! - pravićemo objekat, čak ako nemamo još napisanu klasu - zvaćemo metodu koja ne postoji i kad testove izvršimo, oni trebaju PASTI
  • 14. 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!
  • 15. 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š..
  • 17. 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++
  • 18. 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
  • 19. MOVIE TEST- LARAVEL - pravimo Movie.php sa običnim <?php class Movie{} - u tests/ direktorijumu pravimo novi fajl, MovieTest.php
  • 20. 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: ’AppMovie’ not found  Ako u Movie.php dodamo namespace App i izvršimo testove, dobijamo drugi error:  Call to undefined method AppMovie::name()
  • 21. LARAVEL MOVIE CLASS  Ako dodamo metodu name, pomoću public function name(){}  Dobijamo sljedeći error:  Failed asserting that null matches expected ’Star Wars’
  • 22. 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’);}
  • 23. LARAVEL - WEB  za request/response je sve built in, pogledajmo primjer
  • 24. 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’);
  • 25. 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.
  • 26. 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" },
  • 28. NAKON  ako odradimo npm test, dobijamo
  • 30. PASS!
  • 31. 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..
  • 32. HVALA NA PAŽNJI KONTAKT: FB.COM/DRAGIFY, ITSDRAGOS@GMAIL.COM