Codeception – akceptační testy
- Jiří Nápravník
- Člen | 710
Chci začít testovat nějaké kritické věci. Třeba nákupní proces v eshopu. Pro tenhle účel mi přijde nejlepší využít akceptační testy přes Selenium, konkrétně přímo přes browser, aby šel i Ajax apod. Sáhl jsem tedy po Codeception.
Napíšu co kde má vyplnit, a na co kliknout. Posud vše v pohodě, ale v klasických akceptačních testech moc asserci nevidím, vidím třeba zda je nějaký text na stránce, zda jsem na dané URL apod. Chtěl bych ale udělat i to, že chci zkontrolovat, zda se uložila objednávka přímo do databáze tak, jak má. Přihodil jsem si tam Codeception modul, pro databázi a kontroluji, zda mi to vrátí, co má. Funguje v pohodě, ale chci se spíše zeptat, jdu na to správně? Mohu si v akceptačních testech takhle sáhnout na databázi?
A druhá věc, jak řešit testovací databázi. Sice jsem si nastavil vlastní databázi v DB modulu, i v Doctrine modulu, ale jak se to spustilo přes browser, tak to stejně pracovalo s vývojovou databází, protože to jde přes standardní index.php a bootstrap…
- Jiří Nápravník
- Člen | 710
Tak asi neco nechapu, v Codeception to nazyvaji acceptance, ale musis spustit selenium server…
No proces objednavky unit testama, to si moc nedovedu predstavit. To jsou podle me spise ty integracni ne, tam uz se kontroluje vice tech trid a provazanost mezi nima. Unit testy chapu ja spise pro nejaky knihovny pripadne, kdyz poslu facade tohle pole, tak se vytvori tahle objednavka.
Ja spise potrebuji vyzkouset opravdu funkcnost, ze to dela co ma. Doposud jsem vetsinu testoval rucnim klikanim a kontrolou pak v databazi nebo v adminu, zda se udelalo co melo… To ted v podstate delam automaticky jak jsem napsal v tom testu, ale je to spravne?
Jako jde zkontrolovat samozrejme jestli je tam nejaka flashka, ze byla objednavka odeslana, pripadne jestli jsem presmerovan na spravnou stranku. Ale to je podle me takovy test naprd, protoze nevim, zda se opravdu ulozilo co potrebuji.
- CZechBoY
- Člen | 3608
Tak udelat neco jako unit test, ale rikal bys tomu jinak :D
Mel bys normalni kod pro vlozeni produktu do kosiku, vytvoreni objednavky apotom vytahnuti objednavky a kontrolu jestli vse v objednavce sedi.
Samozrejme muzes to udelat v Seleniu, ale mne se moc nelibi :D navic hledat vsechny ty selektory…
V unit testu bych to zkracene udelal treba takhle
$product = randomProduct();
$address = randomAddress()
$cart->addProduct($product);
Assert::equal(1, $cart->totalProducts());
Assert::equal$product->getPrice(), $cart->getTotal());
$order = new Order($cart, $address, ...);
$order->send();
$orderDb = findOrderInDb($order->getId());
Assert::notEqual(null, $orderDb);
Assert::equal([$product->getId()], $order->getProductIds());
- Jiří Nápravník
- Člen | 710
Jasny rozumim, ale tohle je prave to, ze to otestuje tu funkcionalitu, pro me je spise prednejsi zkontrolovat to, ze to funguje vsechno pospolu, jakoby tam byl navstevnik. Takze opravdu prijit, vyplnit formular a zkontrolovat zda je objednavka opravdu u me. Jen mi trochu prijde, ze to co delam je to, ze mozna delam na jednom miste vice ruznych testu dohromady:-)
Nemluve o tom, ze u toho potrebuji i veci jako cookie, ajax apod.
Editoval Jiří Nápravník (6. 4. 2016 21:54)
- pata.kusik111
- Člen | 78
Do databáze si určitě šáhnou můžeš, ale já osobně to dělám jenom v případě, že nemám jinou možnost. Ten akceptační test si opravdu představ jako chování zákazníka. Ten se ti asi těžko po odeslání košíku podívá do DB, jestli tam máš záznam. Ale zkontroluje to nějak nepřímo – podívá se do nějaké klientské zóny, že tam tu objednávku má, zkontroluje si e-mail, že mu dorazilo potvrzení.
Pokud si kontroluješ databázi, tak je to spíš integrační test a ten bych dělal jako kontrolu po nějakém presenterRequest (v testu vytvoříš ten, co by měl klient když by odeslal objednávku). A ten pak můžeš vesele kontroloval oproti DB.
- Jiří Nápravník
- Člen | 710
Díky za reakci. Takže by asi bylo tedy správnější mrknout třeba do adminsitrace, zda ta objednavka dorazila apod. Jen to je asi trochu pracny, tak zatim zustanu u tohohle:)
Můžeš mě někam odkázat, kde se dá o tom dočíst více? Jestli to chápu tak jakoby odešlu formulář a pak si zkontroluji databazi, ale moc to nepobiram, jak realizovat:)