PHPUnit | Tests | Laravel Framework | Tutorials

David Carr

Testing Blade components in Laravel

Laravel provides a range of methods to test parts of the framework, one of which is called blade() which allows you to test blade components work as expected.

Let's take a simple blade component:

@props([
    'type' => 'submit'
])

<div>
    <button type="{{ $type }}" {{ $attributes->merge(['class' => "btn btn-blue"]) }}>
        {{ $slot }}
    </button>
</div>

this creates a button with a type of submit by default which can be changed by using type="button" when calling the component:

<button type="button">Submit</button>

 Create a test to confirm the button contains Submit text:

/** @test **/
public function button_can_submit(): void
{
    $this->blade('<x-form.button>Submit</x-form.button>')
    ->assertSee('Submit');
}

The test passes since the button does contain Submit.

Next test the type can be changed from the default of submit to button:

/** @test **/
public function button_acts_as_a_button(): void
{
    $this->blade('<x-button type="button">Submit</x-button>')
    ->assertSee('type="button"', false);
}

In order to test the HTML type="button" the assertSee method needs to stop escaping the markup, this is down by passing false as a second param.

As you can see testing blade components is simple to do, let's do a final test to test the class 'btn btn-blue' exists 

/** @test **/
public function button_has_class(): void
{
    $this->blade('<x-button>Submit</x-button>')
    ->assertSee('btn btn-blue');
}

 

The Ultimate Managed Hosting Platform

Support my work by donating with PayPal.

Subscribe to my newsletter

Subscribe and get my books and product announcements.

© 2009 - 2022 DC Blog. All code MIT license. All rights reserved.