nunomaduro / laravel-mojito by nunomaduro

A lightweight package for testing Laravel views.
370,162
373
10
Package Data
Maintainer Username: nunomaduro
Maintainer Contact: enunomaduro@gmail.com (Nuno Maduro)
Package Create Date: 2020-02-07
Package Last Update: 2023-10-10
Home Page: http://nunomaduro.com/
Language: PHP
License: MIT
Last Refreshed: 2024-12-13 15:02:02
Package Statistics
Total Downloads: 370,162
Monthly Downloads: 4,608
Daily Downloads: 223
Total Stars: 373
Total Watchers: 10
Total Forks: 16
Total Open Issues: 2

About Mojito

Mojito was created by, and is maintained by Nuno Maduro, and is lightweight package for testing Laravel views in isolation.

Installation & Usage

Requires PHP 7.2+

Require Mojito using Composer:

composer require nunomaduro/laravel-mojito --dev

How to use:

class WelcomeTest extends TestCase
{
    // First, add the `InteractsWithViews` trait to your test case class.
    use InteractsWithViews; 

    public function testDisplaysLaravel()
    {
        // Then, get started with Mojito using the `assertView` method.
        $this->assertView('welcome')->contains('Laravel');
    }
}

Optionally, you can also perform view testing from your HTTP Tests:

class WelcomeTest extends TestCase
{
    public function testDisplaysLaravel()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    
        $response->assertView()->contains('Laravel');
    }
}

contains

Asserts that the view contains the given text.

$this->assertView('button')->contains('Click me');
$this->assertView('button', ['submitText' => 'Cancel'])->contains('Cancel');

$this->assertView('welcome')->in('title')->contains('Laravel');
$this->assertView('welcome')->in('.content')->contains('Nova');

has

Asserts that the view has the given selector.

$this->assertView('button')->has('button');

$this->assertView('welcome')->has('head');
$this->assertView('welcome')->in('body')->has('.content');

hasAttribute

Asserts that the view root element has the given attribute value.

$this->assertView('button')->hasAttribute('attribute', 'value');
$this->assertView('button')->hasAttribute('data-attribute', 'value');

$this->assertView('welcome')->hasAttribute('lang', 'en');
$this->assertView('welcome')->in('head')->first('meta')->hasAttribute('charset','utf-8');

hasClass

Asserts that the view has an element with the given class.

$this->assertView('button')->hasClass('btn');

$this->assertView('welcome')->in('.content')->at('div > p', 0)->hasClass('title');

hasLink

Asserts that the view has an element with the given link.

$this->assertView('button')->hasLink(route('welcome'));

$this->assertView('welcome')->in('.links')->first('a')->hasLink('https://laravel.com/docs');
$this->assertView('welcome')->in('.links')->at('a', 6)->hasLink('https://vapor.laravel.com');
$this->assertView('welcome')->in('.links')->last('a')->hasLink('https://github.com/laravel/laravel');

Macroable

Fell free to add your own macros to the ViewAssertion::class.

use NunoMaduro\LaravelMojito\ViewAssertion;

// Within a service provider:
ViewAssertion::macro('hasCharset', function (string $charset) {
    return $this->in('head')->first('meta')->hasAttribute('charset', $charset);
});

// In your tests:
$this->assertView('welcome')->hasCharset('utf-8');

Contributing

Thank you for considering to contribute to Mojito. All the contribution guidelines are mentioned here.

You can have a look at the CHANGELOG for constant updates & detailed information about the changes. You can also follow the twitter account for latest announcements or just come say hi!: @enunomaduro

Support the development

Do you like this project? Support it by donating

License

Mojito is an open-sourced software licensed under the MIT license.