InteractsWithViews.php
TLDR
The InteractsWithViews
trait in the file InteractsWithViews.php
provides methods for interacting with views in Laravel testing. It includes methods for creating and rendering views, components, and populating the view error bag.
Methods
view
Creates a new TestView
object from the given view.
blade
Renders the contents of the given Blade template string and returns a TestView
object.
component
Renders the given view component and returns a TestComponent
object.
withViewErrors
Populates the shared view error bag with the given errors.
<?php
namespace Illuminate\Foundation\Testing\Concerns;
use Illuminate\Support\Facades\View as ViewFacade;
use Illuminate\Support\MessageBag;
use Illuminate\Support\ViewErrorBag;
use Illuminate\Testing\TestComponent;
use Illuminate\Testing\TestView;
use Illuminate\View\View;
trait InteractsWithViews
{
/**
* Create a new TestView from the given view.
*
* @param string $view
* @param \Illuminate\Contracts\Support\Arrayable|array $data
* @return \Illuminate\Testing\TestView
*/
protected function view(string $view, $data = [])
{
return new TestView(view($view, $data));
}
/**
* Render the contents of the given Blade template string.
*
* @param string $template
* @param \Illuminate\Contracts\Support\Arrayable|array $data
* @return \Illuminate\Testing\TestView
*/
protected function blade(string $template, $data = [])
{
$tempDirectory = sys_get_temp_dir();
if (! in_array($tempDirectory, ViewFacade::getFinder()->getPaths())) {
ViewFacade::addLocation(sys_get_temp_dir());
}
$tempFileInfo = pathinfo(tempnam($tempDirectory, 'laravel-blade'));
$tempFile = $tempFileInfo['dirname'].'/'.$tempFileInfo['filename'].'.blade.php';
file_put_contents($tempFile, $template);
return new TestView(view($tempFileInfo['filename'], $data));
}
/**
* Render the given view component.
*
* @param string $componentClass
* @param \Illuminate\Contracts\Support\Arrayable|array $data
* @return \Illuminate\Testing\TestComponent
*/
protected function component(string $componentClass, $data = [])
{
$component = $this->app->make($componentClass, $data);
$view = value($component->resolveView(), $data);
$view = $view instanceof View
? $view->with($component->data())
: view($view, $component->data());
return new TestComponent($component, $view);
}
/**
* Populate the shared view error bag with the given errors.
*
* @param array $errors
* @param string $key
* @return $this
*/
protected function withViewErrors(array $errors, $key = 'default')
{
ViewFacade::share('errors', (new ViewErrorBag)->put($key, new MessageBag($errors)));
return $this;
}
}