2017-09-20 4 views
2

Ich mag die Löschmethode testen, aber ich bin nicht die erwarteten Ergebnisse von PHPUnit bekommen. Ich erhalte diese Meldung, wenn die Durchführung des Tests:PHPUnit: Erwartete Statuscode 200 erhielt aber 419 mit Laravel

Expected status code 200 but received 419. Failed asserting that false is true. 
/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:77 
/tests/Unit/CategoriesControllerTest.php:70 

Laravel Version: 5.5

Vielen Dank für jede Hilfe!

Controller-Konstruktor:

public function __construct() 
{ 
    $this->middleware('auth'); 

    $this->middleware('categoryAccess')->except([ 
     'index', 
     'create' 
    ]); 
} 

Controller-Methode:

public function destroy($categoryId) 
{ 
    Category::destroy($categoryId); 

    session()->flash('alert-success', 'Category was successfully deleted.'); 

    return redirect()->action('[email protected]'); 
} 

categoryAccess Middleware:

public function handle($request, Closure $next) 
{ 
    $category = Category::find($request->id); 

    if (!($category->user_id == Auth::id())) { 
     abort(404); 
    } 

    return $next($request); 
} 

Kategorie Modell:

protected $dispatchesEvents = [ 
    'deleted' => CategoryDeleted::class, 
]; 

Ereignis-Listener

public function handle(ExpensesUpdated $event) 
{ 
    $category_id = $event->expense->category_id; 

    if (Category::find($category_id)) { 
     $costs = Category::find($category_id)->expense->sum('cost'); 

     $category = Category::find($category_id); 

     $category->total = $costs; 

     $category->save(); 
    } 
} 

PHPUnit löschen Test:

use RefreshDatabase; 

protected $user; 

public function setUp() 
{ 
    parent::setUp(); 
    $this->user = factory(User::class)->create(); 
    $this->actingAs($this->user); 
} 

/** @test */ 
public function user_can_destroy() 
{ 
    $category = factory(Category::class)->create([ 
     'user_id' => $this->user->id 
    ]); 

    $response = $this->delete('/category/' . $category->id); 

    $response->assertStatus(200); 

    $response->assertViewIs('category.index'); 
} 
+0

Es ist ein Authentifizierungsproblem, versuchen Sie mit '$ this-> withoutMiddleware();' nur um zu sehen, ob es in Ordnung sein wird !! – Maraboc

+0

Hallo danke, habe ich auf das Verfahren, dass und lief den Test erneut und ich bekomme diese Meldung jetzt: Erwarteten Statuscode 200 erhielt aber 302 – qwerty11

+0

dieses Mal versucht die Behandlung 'WithoutMiddleware verwenden;' in der PHPUnit Klasse und nicht vergessen um es zu importieren, verwenden Sie Illuminate \ Foundation \ Testing \ WithoutMiddleware; ' – Maraboc

Antwort

1

Manchmal beim Testen Sie Middle deaktivieren müssen, um fortzufahren:

use Illuminate\Foundation\Testing\WithoutMiddleware; 

class ClassTest extends TestCase 
{ 
    use WithoutMiddleware; // use this trait 

    //tests here 
} 

und wenn Sie wollen, dass sie nur deaktivieren für einen spezifischen Testgebrauch:

$this->withoutMiddleware(); 
0

Wenn Sie Ihre Konfigurationsdateien im Cache können Sie dieses Problem lösen, indem php artisan config:clear ausgeführt wird.

Verwandte Themen