The Laravel DOM Assertions package by René Sinnbeck adds document object model (DOM) assertion helpers to Laravel's TestResponse
class:
This package provides some extra assertion helpers to use in HTTP Tests. If you have ever needed more control over your view assertions than
assertSee
,assertSeeInOrder
,assertSeeText
,assertSeeTextInOrder
,assertDontSee
, andassertDontSeeText
then this is the package for you.
The package's README has an example of asserting a navigation menu to ensure the correct li
element has an active
class, but also ensure the "Home" li
element does not:
$this->get(route('about')) ->assertOk() ->assertElementExists('nav > ul', function(AssertElement $ul) { $ul->contains('li', [ 'class' => 'active', 'text' => 'About' ]); $ul->doesntContain('li', [ 'class' => 'active', 'text' => 'Home' ]); });
The snippet illustrates the granular control provided by this package, including testing DOM elements, nested elements, forms, and more. At the time of the writing, this package's main assertions include:
- Assert if an element exists
- Assert if an element has a given attribute
- Assert if an element contains in another element
- Assert that an element does not contain another element
- Find an element to process further assertions
- Assert if a form exists
- Assert that a form has a CSRF token
- Assert for select options
You can learn more about this package, get full installation instructions, and view the source code on GitHub.
As a side note, this package's source code has an example of using the macroable mixin method to add multiple macro methods into another object from a service provider, which might be a helpful inspiration for others writing packages for Laravel.