Heim  >  Artikel  >  Backend-Entwicklung  >  So führen Sie Request im Laravel-Einheitentest aus

So führen Sie Request im Laravel-Einheitentest aus

WBOY
WBOYOriginal
2016-09-02 08:57:041073Durchsuche

<code>class TestRequest()
{
    public function rules(){
        return [
            'a'=>['required','min:3'],
        ];
    }

}

//controller
public functino store(TestRequest $request)
{

}

Test.php
public function testStore()
{
    $data = [];
    $response = $this->call('POST','uri',$data);
    dd($response->getContent())
}
</code>

Jedes Mal, wenn die Überprüfung fehlschlägt, ist $response->getStatusCode() immer 302, was normal ist.
Aber ich möchte zum Beispiel wissen, ob $data['a'] = 'a', die Anzahl der Ziffern weniger als 3 beträgt, und ich möchte die sofortigen Informationen erhalten, wie soll ich diese erhalten?
Neu beim Testen, bitte helfen Sie mir, danke!

Antwortinhalt:

<code>class TestRequest()
{
    public function rules(){
        return [
            'a'=>['required','min:3'],
        ];
    }

}

//controller
public functino store(TestRequest $request)
{

}

Test.php
public function testStore()
{
    $data = [];
    $response = $this->call('POST','uri',$data);
    dd($response->getContent())
}
</code>

Jedes Mal, wenn die Überprüfung fehlschlägt, ist $response->getStatusCode() immer 302, was normal ist.
Aber ich möchte zum Beispiel wissen, ob $data['a'] = 'a', die Anzahl der Ziffern weniger als 3 beträgt, und ich möchte die sofortigen Informationen erhalten, wie soll ich diese erhalten?
Neu beim Testen, bitte helfen Sie mir, danke!

mwjmt mg

Dieser Test ist so seltsam.
Wenn Sie wirklich die Fehlermeldung erhalten möchten, können Sie Session::get verwenden. Denn nachdem die Überprüfung fehlschlägt, wird das Fehlerobjekt in der Sitzung im Flash gespeichert.

Zum Beispiel in Ihrem Fall:

<code>$response = $this->call(...);

$this->assertEquals(302, $response->getStatusCode());

dd(session('errors')->getBag('default')->first('a'));</code>

getBag ruft ein MessageBag-Objekt ab. Sie können get verwenden, um alle Überprüfungsfehlermeldungen abzurufen, oder first, um die erste Fehlermeldung abzurufen. Die API-Dokumentation finden Sie unter: http://laravel-china.org/api/...

--- Update

Im Allgemeinen sollte ein Test wie dieser in mindestens zwei Teile unterteilt werden:
Testen Sie zuerst den Validierungsteil und verwenden Sie Validator, z. B.

<code>$data = ['a' => 'b'];
$request = new MyRequest();
$rules = $request->rules();
$validator = Validator::make($attributes, $rules);
$fails = $validator->fails();
$this->assertEquals(false, $fails);</code>

Dann schreiben Sie die Testmethode, um die Logik dahinter zu testen.

In Bezug auf Testanfragen in Laravel bietet das Framework viele Methoden zum Testen. Sie können einen Blick auf IlluminateFoundationTestingConcernsMakesHttpRequests werfen. Dies deckt grundsätzlich alle Tests auf Anfrage und Antwort ab. Verwenden Sie andere Methoden, um andere Teile zu testen, z. B. das Testen der Benutzerauthentifizierung, das Testen von Cookie-Sitzungen, das Testen von Datenbanken, das Testen von Warteschlangen usw.

Stellungnahme:
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