2016-11-30 3 views
-1

Ich habe eine Reihe von Testfällen für das Registrierungsformular für ein Laravel 5.3-Projekt geschrieben. Einer der grundlegenden Testfälle besteht darin, gefälschte Daten einzufügen und nach der richtigen Umleitung zu suchen. Mein Testfall Code:Laravel 5.3: Hinzufügen einer Modellmethode mit Statuscode 500

/** 
* Check for the registration form 
* 
* @return void 
*/ 
public function testNewUserRegister(){ 
    // Generate a ranom name 
    $thisName = str_random(8); 
    // Genearte a random email 
    $thisEmail = str_random(8)."@google.com"; 

    // Type some valid values 
    $this->visit('/register') 
     ->type($thisName,'name') 
     ->type($thisEmail,'email') 
     ->type('password123','password') 
     ->type('password123','password_confirmation') 
     ->press('Register') 
     ->seePageIs('/home'); 
} 

Alles war richtig funktioniert und keine Beschwerden von PHPUnit. Aber wenn ich die folgende Methode in meinem User Modell enthalten:

// Function to check for the adminship 
public function isAdmin(){ 
    // Check if the user is logged in 
    if(Auth::check()){ 
    // Check if the user is admin 
    if(Auth::user()->isAdmin){ 
     return true; 
    } 
    } 

    // Return false if not 
    return false; 
} 

Die obige Testfall testNewUserRegister ausfällt und finden Sie die Fehlermeldung:

There was 1 failure: 

1) AuthTest::testNewUserRegister 
A request to [http://localhost/home] failed. Received status code [500]. 

/var/www/html/project-css/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:220 
/var/www/html/project-css/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:92 
/var/www/html/project-css/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:150 
/var/www/html/project-css/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:92 
/var/www/html/project-css/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:125 
/var/www/html/project-css/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:580 
/var/www/html/project-css/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:567 
/var/www/html/project-css/tests/AuthTest.php:26 

Caused by 
ErrorException: Undefined property: App\User::$isAdmin in /var/www/html/project-css/app/User.php:36 

Des Weiteren finden Sie das Datenbankschema:

Schema::create('users', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->string('email')->unique(); 
     $table->string('password'); 
     $table->boolean('isAdmin')->default(false); 
     $table->boolean('hasAccess')->default(true); 
     $table->rememberToken(); 
     $table->timestamps(); 
    }); 

Nicht ein Duplikat hier ist, warum:

Es ist nicht aufgrund der Kamelfall wie vorgeschlagen. Wenn der folgende Parameter den folgenden Parameter enthält, schlägt der folgende Parameter noch fehl:

Auch das Schema geändert in Kamel Fall hat mein Problem nicht gelöst noch der Test schlägt fehl.

+1

Sagen Sie mir, was ist klarer als das: 'ErrorException: Undefinierte Eigenschaft: App \ User :: $ isAdmin in /var/www/html/project-css/app/User.php: 36' – Kyslik

+0

@Kyslik gibt es eine Attribut 'isAdmin' im Schema. – PseudoAj

+0

@PseudoAj Können Sie uns Ihr Schema zeigen? – ceejayoz

Antwort

1

Sie können über diese 2 verschiedenen Möglichkeiten gehen.

1. Ändern Sie die Migration

Schema::create('users', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('name'); 
    $table->string('email')->unique(); 
    $table->string('password'); 
    $table->boolean('is_admin')->default(false); 
    $table->boolean('has_access')->default(true); 
    $table->rememberToken(); 
    $table->timestamps(); 
}); 

2. eine Accessor erstellen

In Ihrem User Modell erstellen Sie die folgende Funktion:

public function getIsAdminAttribute() 
{ 
    return $this->isAdmin; 
} 

Dies wird die gerade zurückkehren Wert der isAdmin Spalte in den Datenbanken e.

Ich würde persönlich mit der ersten Option gehen, es ist eine bessere Namenskonvention für Tabellen und hält alles organisiert.

+0

habe versucht, Schema in den Kamel Fall zu ändern hat nicht funktioniert. – PseudoAj

0

Ich würde dies tun: In Ihrem User-Modell:

public function isAdmin(){ 
    // this looks for an admin column in users table 
    return $this->admin; 
} 

Jetzt ein Admin-Bereich zur Datenbank hinzufügen:

php Handwerkers add_admin_to_users_table

In Ihrer Migration:

public function up() 
    { 

     Schema::table('users', function ($table) { 
     $table->boolean('admin')->default(0); 
     }); 
} 


     public function down(){ 
     Schema::table('users', function ($table) { 
     $table->dropColumn('admin'); 
    }); 

Dies sollte ordnungsgemäß funktionieren.

+0

Ich habe bereits den Admin in meiner Migration. '$ this' löst das Problem nicht. – PseudoAj

+0

Sie befinden sich bereits in Ihrem Benutzermodell, Sie müssen also die Methode 'check()' nicht hinzufügen. was ich dir hier gegeben habe, arbeite sehr nett mein Freund. – GabMic

+0

Einverstanden. Aber ich glaube und bestätigt, dass das Problem nicht mit der Prüfmethode ist. Es ist mit der Eigenschaft 'isAdmin'. – PseudoAj