Whispere

Ahoj, jak se řeší, když potřebuji testovat, zda se vložil správný počet záznamů do databáze? Dohledával jsem to, ale nemohu nic kloudného najít, resp. vše se to řeší obezličkami typu mockery (kde jestli jsem správně pochopil, tak to jen simuluji). Čekal bych normální řešení, kdy se vkládají data do databáze a z ní je poté kontroluji, když už se při testech dělají migrace.

Ešte nie si členom CZ/SK Laravel komunity?

To možeš ľahko zmeniť. Registrácia je zdarma a ako registrovaný člen získaš množstvo výhod. Prečítaj si prečo by si mal byť členom.

Prihlásiť sa Zaregistrovať
Zoradiť odpovede:
xvital
by @xvital (460), pred 9 mesiacmi

Nejde na to pouzit assertEquals?

// insert 25 users

$this->assertEquals(25, $users->count());

Co viem, tak priamo nad DB Laravel ponuka len existencne asserty, teda assertDatabaseHas a assertDatabaseMissing...

Whispere
by @Whispere (137), pred 9 mesiacmi

Aha, to mě nenapadlo. Zmátlo mě, že když se dívám do "database_test", tak tam se během testů provedou migrace, ale jinak tabulky jsou prázdné.

xvital
by @xvital (460), pred 9 mesiacmi

Zalezi od nastavenia, ci tam mas transakcie a rollbacky, alebo migrujes hore dole a tiez kedy sa do tych tabuliek pozeras. Kazdy test by mal zacinat cerstvou DB a byt nezavisly na inych testoch. Ak sa pozeras do DB pri transakcnom spracovani, tam commit nejde nikdy, takze v tabulkach data neuvidis.

Idealne je na testy pouzit SQLite :in_memory:, obcas ale mozes narazit na problem, ze SQLite nepodporuje uplne celu mnozinu (My)SQL dotazov. Ak je testovanie kriticke a testov bude vela - rychlost bude dolezita, je dobre to prisposobit uz v ramci aplikacie a zjednodusit si robotu. Inak potom druha pouzitelna moznost zo skusenosti je in-memory engine MySQL(MariaDB) a transakcie.

Whispere
by @Whispere (137), pred 8 mesiacmi

Vyřešeno, problém byl v konfiguraci, kdy se testy prováděly na localhostu na "produkční" databázi namísto na testovací (databaze_test).