Heim >PHP-Framework >Laravel >Einführung in den Laravel-Unit-Test: Simulation authentifizierter Benutzer

Einführung in den Laravel-Unit-Test: Simulation authentifizierter Benutzer

藏色散人
藏色散人nach vorne
2021-04-23 16:13:541627Durchsuche

Laravel-Unit-Test: Authentifizierte Benutzer simulieren

Beim Schreiben von Unit-Tests in Laravel kommt es häufig vor, dass Sie authentifizierte Benutzer simulieren müssen, z. B. beim Erstellen neuer Artikel oder beim Erstellen Bestellungen usw. Wie implementiert man es also im Laravel-Unit-Test?

Offizielle Lösung

Es wird im Testkapitel in der offiziellen Dokumentation von Laravel erwähnt:

Natürlich besteht eine häufige Verwendung der Sitzung darin, den Status für den authentifizierten Benutzer aufrechtzuerhalten. Die Hilfsmethode „ActingAs“ bietet eine einfache Möglichkeit, einen bestimmten Benutzer zu authentifizieren user als aktuellen Benutzer verwenden. Beispielsweise können wir eine Modellfabrik verwenden, um einen Benutzer zu generieren und zu authentifizieren: code> Trait > und be Methoden.

Nach dem Festlegen können wir im nachfolgenden Testcode den aktuell authentifizierten Benutzer über Methoden wie auth()->user() abrufen. IlluminateFoundationTestingConcernsImpersonatesUsers Trait 中的 actingAsbe 方法。

设置以后在后续的测试代码中,我们可以通过 auth()->user() 等方法来获取当前认证的用户。

伪造认证用户

在官方的示例中有利用 factory 来创建一个真实的用户,但是更多的时候,我们只想用一个伪造的用户来作为认证用户即可,而不是通过 factory 来创建一个真实的用户。

在 tests 目录下新建一个 User calss:

<?php

use App\User;

class ExampleTest extends TestCase
{
    public function testApplication()
    {
        $user = factory(User::class)->create();

        $response = $this->actingAs($user)
                         ->withSession(['foo' => 'bar'])
                         ->get('/');
    }
}

必须在 $fillable 中添加 id attribute . 否则会抛出异常: IlluminateDatabaseEloquentMassAssignmentException: id

Gefälschter authentifizierter Benutzer

Im offiziellen Beispiel wird Factory verwendet, um einen echten Benutzer zu erstellen, aber häufiger möchten wir einfach einen gefälschten Benutzer als authentifizierten Benutzer verwenden, anstatt über die Factory einen echten Benutzer zu erstellen.
Erstellen Sie eine neue Benutzer-Klasse im Testverzeichnis:
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    protected $fillable = [
        'id', 'name', 'email', 'password',
    ];
}
Sie müssen das id-Attribut in $fillable hinzufügen. Andernfalls eine Ausnahme wird geworfen: IlluminateDatabaseEloquentMassAssignmentException: id
Als nächstes fälschen Sie einen Benutzerauthentifizierungsbenutzer:
$user = new User([
    'id' => 1,
    'name' => 'ibrand'
]);

 $this->be($user,'api');
🎜Ich werde in Zukunft weiterhin einige Artikel über kleine Details von Unit-Tests schreiben, bitte achten Sie darauf: )🎜 🎜Verwandte Empfehlungen:🎜Die neuesten fünf Laravel-Video-Tutorials🎜🎜🎜

Das obige ist der detaillierte Inhalt vonEinführung in den Laravel-Unit-Test: Simulation authentifizierter Benutzer. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen