Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Phpunit Extensions Laravel Package

lastdragon-ru/phpunit-extensions

PHPUnit extensions for PHP projects, adding extra test utilities and helpers to streamline assertions, fixtures, and test setup. Designed to integrate cleanly with PHPUnit and improve developer productivity in automated testing workflows.

View on GitHub
Deep Wiki
Context7

PHPUnit Extensions 🐝

Various useful assertions/extensions for PHPUnit.

Requirements

Requirement Constraint Supported by
PHP ^8.5 HEAD ⋯ 11.0.0
^8.4 HEAD ⋯ 10.0.0
^8.3 10.3.0 ⋯ 10.0.0
PHPUnit ^13.0.0 HEAD ⋯ 11.0.0
^12.0.0 10.3.0 ⋯ 10.0.0
^11.3.0 10.3.0 ⋯ 10.1.0
^11.2.0 10.0.0

Installation

[!NOTE]

The package intended to use in dev.

composer require --dev lastdragon-ru/phpunit-extensions

Extensions

[!NOTE] You can include all available extensions via

<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
    <!-- ... -->
    <extensions>
        <bootstrap class="\LastDragon_ru\PhpUnit\Extensions\Extension"/>
    </extensions>
    <!-- ... -->
</phpunit>

Strict Scalar Compare

By default, PHPUnit compares scalars via == operator, so Assert::assertEquals(1, true) will pass. The extension adds own Comparator to compare scalars via === operator.

To register extension update your phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
    <!-- ... -->
    <extensions>
        <bootstrap class="\LastDragon_ru\PhpUnit\Extensions\StrictScalarComparator\Extension"/>
    </extensions>
    <!-- ... -->
</phpunit>

Test Requirements

PHPUnit provides several attributes like \PHPUnit\Framework\Attributes\RequiresPhp that allow skip the test if the condition doesn't meet. But there is no way to check if the specific composer package is installed or not. The extension fills this gap.

To register extension update your phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
    <!-- ... -->
    <extensions>
        <bootstrap class="\LastDragon_ru\PhpUnit\Extensions\Requirements\Extension"/>
    </extensions>
    <!-- ... -->
</phpunit>
<?php declare(strict_types = 1);

namespace LastDragon_ru\PhpUnit\Docs\Examples;

use Composer\InstalledVersions;
use LastDragon_ru\PhpUnit\Extensions\Requirements\Attributes\RequiresPackage;
use PHPUnit\Framework\TestCase;

/**
 * @internal
 */
#[RequiresPackage('phpunit/phpunit')]
final class RequirementsExtensionTest extends TestCase {
    #[RequiresPackage('phpunit/phpunit', '>=10.0.0')]
    public function testSomething(): void {
        self::assertTrue(InstalledVersions::isInstalled('phpunit/phpunit'));
    }
}

Path Comparator

The DirectoryPath/FilePath have internal properties which make direct comparison impossible. The extension provides a special comparator that compares paths via Path::equals().

To register extension update your phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
    <!-- ... -->
    <extensions>
        <bootstrap class="\LastDragon_ru\PhpUnit\Extensions\PathComparator\Extension"/>
    </extensions>
    <!-- ... -->
</phpunit>

Assertions

[!NOTE] You can include all available assertions via use \LastDragon_ru\PhpUnit\Assertions or only needed via individual traits like \LastDragon_ru\PhpUnit\Filesystem\Assertions.

Constraints

DirectoryEquals

Compares two directories. By default, directories are equal if the list of their children is the same, and files have the same content. Permissions are ignored. You can override \self::properties() and \self::equal() to customize comparison logic.

Utilities

TestData

Small helper to load data associated with test.

TempFile

Creates a temporary file in the system temp directory. The file will be removed after the instance removal.

TempDirectory

Creates a temporary directory in the system temp directory. The directory will be removed after the instance removal.

Upgrading

Please follow Upgrade Guide.

Contributing

Please use the main repository to report issues, send pull requests, or ask questions.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table
siberfx/flysystem-wasabi
hollyit/token-replace
ippanelcom/laravel-sdk
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel