2016-05-25 4 views
0

nehme ich eine Klinge Vorlage haben:(Laravel) gespotteten Daten liefern, um beim Testen zu sehen?

// resources/views/fragments/foo.blade.php 
<p>{{ $foo }}</p> 

(. Dies ist natürlich eine sehr abgespeckte Version meiner Frage, die ich nicht, warum ich überhaupt eine Klinge Vorlage so einfach zu testen brauchen würde.) in meinem Controller, würde ich normalerweise bevölkern diese Vorlage wie folgt aus:

// app/Http/Controllers/FooController.php 
$parameters = ['foo' => '']; 
return view('fragments.foo', $parameters); 

Das Problem ist, ich diese Vorlage, um sicherzustellen, möchte einen phpunit Test schreiben macht erfolgreich, wenn ich es einen bestimmten Wert für $foo passieren, aber ich kann nicht herausfinden, wie Daten beim Ausführen des Komponententests an die Ansicht gesendet werden. Ich habe das versucht:

// tests/TestFooController.php 
$this->withSession(['foo' => 'bar'])->visit('/foo')->assertViewHas('foo', 'bar'); 

aber dieser Test fehlgeschlagen. Wie kann ich meine eigenen Daten innerhalb meines Tests an die Ansicht übergeben?

Antwort

0

schließlich um genug gegoogelt eine Abhilfe zu bekommen:

// tests/TestFooController.php 
$parameters = ['foo' => 'bar']; 
view()->composer('fragments.foo', function ($view) use ($parameters) { 
    $view->with($parameters); 
}); 
$this->visit('/foo') 
    ->assertViewHasAll([ 
     'foo' => 'bar', 
    ]); 

Die kühle Sache (je nachdem, wie viel Unabhängigkeit wie Sie bei der Prüfung) ist, dass, wenn meine FooController Pässe anderen Variablen, aber ich überschreiben nur einer von ihnen In der Ansicht des Test-Composers sind die anderen nicht überschriebenen Werte weiterhin vorhanden.