Weave Code
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.
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky
spatie/mailcoach-vapor