Ankündigung

Einklappen
Keine Ankündigung bisher.

PHPUnit / L5: Unklarer Fehler in find - Methode

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHPUnit / L5: Unklarer Fehler in find - Methode

    Ich hab gerad Probleme mit Softdelete / forceDelete und habe mir eine kleine Test-Datei gebaut.
    PHP-Code:
    // Softdeleted User
    class MyUser extends \App\User {
          use 
    Illuminate\Database\Eloquent\SoftDeletes;
          
          public 
    $deleted_at;
          
          public 
    $table "users";
          
          protected 
    $dates = ['deleted_at'];
    }

    class 
    DeletableTest extends TestCase {
        public function 
    testForceDelete() {
               
    $user = new MyUser();
               
    $user->name                 'Otto';
               
    $user->email                'Ottor@localhost.de';
               
    $user->password             'secret';  
               
    $this->assertTrue($user->save());
              
               
    $find_user1 MyUser::find($user->id);
               
    $this->assertTrue(!$find_user1 !== null);
              
               
    $user->delete();
               
    $find_user2 MyUser::find($user->id);
              
               
    $this->assertFalseis_null($find_user2), 'find_user2 (' $user->id ')=> ' serialize($find_user2));   //  <-------- Schlägt fehlt
               
    $this->assertTrue(isset($find_user2->deleted_at), "find_user2 => " serialize($find_user2));
               
    $this->assertTrue($find_user2->deleted_at !== null"Fehler => " serialize($find_user2));
        } 
    Fehler:
    Code:
    find_user2( 5 ) => N;
    Failed asserting that true is false
    Nach dem anlegen eines Users. Wird der User durch
    PHP-Code:
               $user->delete(); 
    s. MyUser Klasse soft deleted. Bis dahin stimmt auch alles. Dann versuche mir erneut den User mit der ID $user->id zu hole. Dieses sollte er eigentlich auch machen, da die Datenzeile mit dieser Id existiert (schon überprüft), allerdings wird null (also kein Datensatz gefunden) mir zurückgegeben. Und dieses verstehe ich nicht.

  • #2
    Wahrscheinlich ist der Fehler in der find() Funktion zu suchen.

    Ich würde dir übrigens empfehlen auf statische Funktionen zu verzichten. Vor allem bei Unit-Tests gibts dann immer wieder unerwartete Nebeneffekte.

    Kommentar


    • #3
      PHP-Code:
                 $user->delete();
                 
      $find_user2 MyUser::find($user->id); 
      Das "delete" löscht nicht zufällig auch die Eigenschaften? ie. ist nach dem "delete" $user->id gültig?
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #4
        @Istegelitz: Nein
        @hellbringer: Die Funktion (von Laravel stammend) arbeitet einwandfrei

        Konntes es inzwischen herausfinden.

        Lösung:
        find fügt "delete_at' not null der SQL - Anweisung hinzu

        Zitat von lstegelitz Beitrag anzeigen
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
        Dieses wussten schon die Könige. Denkt an Marie Antoinette: "Wenn sie kein Brot haben sollen, sie doch Kuchen essen"

        Kommentar

        Lädt...
        X