Views

Show your views some love

Feature tests check the response. But what about the form itself?

The View
<!-- resources/views/users/create.blade.php -->
<form method="post" action="/users">
    @csrf
    <input type="text" name="name" />
    <input type="email" name="email" />
    <input type="submit" value="Create" />
</form>

<div id="user-list">
    <div id="user-card"></div>
</div>
The Test
// tests/Feature/Http/Controllers/UserController/CreateTest.php
class CreateTest extends TestCase
{
    use TestableFormRequest;

    #[Test]
    public function create_view_has_form(): void
    {
        $response = $this->get('/users/create');

        $response->assertViewIs('users.create')
            ->assertViewHas('team', function (Team $team) {
                return $team->name === 'Ac Milan';
            })
            ->assertOK()
            ->assertViewHasForm()
            ->assertFormHasCSRF()
            ->assertFormHasField('text', 'name')
            ->assertFormHasField('email', 'email')
            ->assertFormHasSubmitButton()
            ->assertElementHasChild('div#user-list', 'div#user-card');
    }
}

Powered by @jcergolj laravel-view-test-assertions