Sto scrivendo alcuni test unitari per testare gli endpoint API nella mia applicazione Laravel 5 e molti endpoint richiedono l'autenticazione dell'utente. Invece di avere lo stesso codice di creazione dell'account utente in ogni test, ho voluto definire un tratto RegistersUsers
da utilizzare nelle classi di test, che avrà un metodo registerUser()
.Trait non trovato all'interno dei test dell'unità Laravel 5
La struttura di directory della mia cartella tests
è in questo modo:
/tests
/Traits
RegistersUsers.php
TestCase.php
UserTest.php
ho namespace TestCase.php
e UserTest.php
con l'aggiunta di questa dichiarazione dello spazio dei nomi:
namespace MyappTests;
e ho namespace RegistersUsers.php
in questo modo :
namespace MyappTests\Traits;
Il mio UserTest
si presenta così, con lo spazio dei nomi e la dichiarazione use
in modo da poter sfruttare RegistersUsers
.
<?php
namespace MyappTests;
use MyappTests\Traits\RegistersUsers;
class UserTest extends TestCase
{
use RegistersUsers;
// ... rest of the class
Tuttavia, quando si esegue il test, PHPUnit muore con l'errore fatale:
Trait 'MyappTests\Traits\RegistersUsers' not found in /home/vagrant/demo-app-net/tests/UserTest.php on line 9
Per quanto posso dire, il mio namespacing è corretto e la mia caratteristica dovrebbe essere trovato. Sono andato in giro con questo e non riesco a capirlo.
Questo era esattamente il problema, immaginavo che sarebbe stato automaticamente raccolto! Grazie! –
Oppure usa psr4, che troverà il tuo spazio dei nomi Tratti. – OIS
La modifica sopra riportata dovrebbe aiutare con l'errore, ma la soluzione migliore per IMO sarebbe quella di utilizzare Codeception per scrivere test invece di PHPUnit direttamente - contiene molti metodi di supporto per rendere davvero facile il test delle app di Laravel. Compreso, ad es. $ I-> amLoggedAs() metodo che autenticherà il tuo utente. Vedi http://codeception.com/docs/modules/Laravel5 per maggiori dettagli. –