Sto scrivendo i test per la mia applicazione Laravel utilizzando la libreria Codeception. Sto usando il Laravel5 module e lo ho configurato con cleanup
il che significa che tutti i test verranno eseguiti all'interno di una transazione di database, in modo che il mio database di test non si riempia di dati di test.Test di una rotta di Laravel 5 con una regola esistente tramite Codeception
Uno dei punti finali sto testando ha le seguenti regole di validazione insieme contro tramite Richieste Forma:
public function rules()
{
return ['user_id' => 'required|exists:users,id'];
}
Il test che ho scritto Per postare messaggi in questo endpoint è la seguente:
public function store(ApiTester $I)
{
// Create a couple of users
$users = factory(\App\Models\User::class, 2)->create();
$I->wantTo('ask someone to be my friend');
$I->authenticateAs($users[0]);
$I->sendPOST('users/' . $users[0]->id . '/friendships', [
'user_id' => $users[1]->id
]);
$I->seeResponseCodeIs(201);
}
Questo test fallisce sempre. Dopo aver esaminato, posso vedere che non riesce perché la richiesta non riesce a convalidare a causa della regola exists:users,id
. Se cambio le impostazioni di Codeception per non eseguire test all'interno di una transazione, il validatore di Laravel può vedere con successo l'esistenza dei due utenti che ho creato all'inizio del mio test e il test passa.
Quindi, la mia domanda è: esiste un modo per mantenere il comportamento del wrapping di ciascuno dei miei test in una transazione di database e far sì che il validatore di Laravel possa vedere i record che creo nei miei test?
Io ho lo stesso identico problema che ogni aiuto sarebbe gradito – Fabrizio
Potresti aggiungere una configurazione di suite alla tua domanda? – Naktibalda