Ich schreibe Tests für meine Laravel-Anwendung mit der Codeception-Bibliothek. Ich verwende die Laravel5 module, und habe es mit cleanup
konfiguriert, was bedeutet, dass alle Tests innerhalb einer Datenbanktransaktion ausgeführt werden, so dass meine Testdatenbank nicht mit Testdaten gefüllt wird.Testen einer Laravel 5-Route mit einer exists-Regel über Codeception
Einer der Endpunkte I-Tests sind hat die folgenden Validierungsregeln festgelegt dagegen über Formular Anfragen:
public function rules()
{
return ['user_id' => 'required|exists:users,id'];
}
Der Test, den ich geschrieben habe zu diesem Endpunkt werden.Dies ist wie folgt:
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);
}
Dieser Test schlägt immer fehl. Nach der Untersuchung kann ich sehen, dass es fehlschlägt, weil die Anforderung aufgrund der exists:users,id
-Regel die Validierung nicht besteht. Wenn ich die Codeception-Einstellungen so ändere, dass Tests innerhalb einer Transaktion nicht ausgeführt werden, kann der Validator von Laravel die Existenz der zwei Benutzer, die ich zu Beginn meines Tests erstellt habe, erfolgreich sehen und der Test wird bestanden.
Also, meine Frage ist, gibt es eine Möglichkeit, dass ich das Verhalten des Einwickelns jedes meiner Tests in einer Datenbanktransaktion beibehalten kann, und haben Laravel's Validator in der Lage, die Datensätze zu sehen, die ich in meinen Tests erstellen?
Ich habe genau das gleiche Problem jede Hilfe würde geschätzt werden – Fabrizio
Könnten Sie eine Suite-Konfiguration zu Ihrer Frage hinzufügen? – Naktibalda