Laravel Unit Testing, wie lösche ich "inDatabase" gelöschte Zeile?

8

Ich arbeite an einem kleinen Unit-Test, bei dem ich eine Zeile weich lösche. Um den Test als erfolgreich zu markieren, muss ich diese Zeile finden mit:

  • eine gegebene ID und
  • deleted_at column sollte nicht null sein.

Ich kann die erste Bedingung erfüllen - denn offensichtlich kenne ich die ID.

Leider weiß ich nicht, wie ich seeInDatabase method sagen kann, dass ich deleted_at nicht null:

erwarte %Vor%

Irgendwelche Hinweise?

'deleted_at <>' => null bricht

'deleted_at' => ['!=' => null] bricht auch

    
slick 14.10.2015, 06:04
quelle

4 Antworten

13

Momentan ist es nicht möglich. Sowohl seeInDatabase als auch notSeeInDatabase übergeben das Array direkt an die Methode where des Abfrage-Generators und verstehen nicht, wie man mit etwas anderem als = umgeht, wenn ein Array übergeben wird.

Ссылка

%Vor%

Option 1 - Fügen Sie Ihrer TestCase-Klasse den folgenden Code hinzu, um den Sie Ihre Testfälle von

erweitern

Gist: Ссылка

%Vor%

Option 2 - Installieren Sie das folgende Composer-Paket

Dieses Composer-Paket ist genau derselbe Code wie oben, aber für Composer gepackt.

composer require kirkbater/soft-deletes

Benutze es dann innerhalb deiner spezifischen Testklasse:

%Vor%     
EspadaV8 14.10.2015, 23:39
quelle
23

Ich habe es so gemacht:

%Vor%

Ich überprüfe also zwei Schritte

  1. Ich überprüfe, ob es einen Eintrag mit unserer ID in der Tabelle
  2. gibt
  3. Ich überprüfe, ob es keinen Datensatz mit unserer ID und deleted_at = null in der Tabelle
  4. gibt
Wojciech Mruk 11.03.2016 10:11
quelle
1

Dies ist eine alte Frage, aber für diejenigen, die neuere Versionen von Laravel (5.4 und höher) verwenden, gibt es jetzt eine assertSoftDeleted -Assion: Dokumentation .

Die Antwort auf die ursprüngliche Frage lautet nun:

%Vor%     
GluePear 06.01.2018 19:50
quelle
-1

Es ist nicht getestet, aber versuche es so:

%Vor%     
fico7489 14.10.2015 11:38
quelle