Heim > PHP-Framework > Laravel > Hauptteil

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

藏色散人
Freigeben: 2021-04-25 08:53:34
nach vorne
1602 Leute haben es durchsucht

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('/');
    }
}
Nach dem Login kopieren

必须在 $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',
    ];
}
Nach dem Login kopieren
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');
Nach dem Login kopieren
🎜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!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage