NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Testing for Laravel

Použitie v aplikáciách

Bežná Laravel aplikácia — bez Roundly balíka a bez zmeny základnej triedy — získa podmnožinu použiteľnú v aplikáciách cez Pest expectations alebo statické Assert, priamo vo svojej existujúcej sade:

use RoundlyConsulting\Testing\Assert;

it('has a runnable migration order', function (): void {
    expect(database_path('migrations'))->toHaveRunnableMigrationOrder();
});

it('reads every services key it relies on from the shipped config', function (): void {
    // Forward-only: an app's config legitimately carries keys read by vendor packages.
    expect(config_path('services.php'))->toSatisfyConfigContract(app_path(), ['reverse' => false]);
});

it('does not leak credentials through artisan about', function (): void {
    // Only a secret that is set can be looked for — a null or empty entry throws.
    config(['services.stripe.secret' => 'sk_test_do_not_render_me']);

    expect('environment')->toLeakNoSecrets(
        secrets: [config('app.key'), config('services.stripe.secret')],
        mustRender: ['Application Name'],
    );
});

Čo platí pre aplikácie

  • Kontrola poradia migrácií, spúšťač na reálnej databáze a jeho negatívna kontrola.
  • Konfiguračný kontrakt v režime len dopredu — spätný smer si zapnete sami.
  • Bezpečné zachytenie about.
  • Dôkaz výmeny modelu — aj aplikácie používajú modely balíkov vymeniteľné cez konfiguráciu, takže dokážete, že balík tretej strany výmenu naozaj rešpektuje.
  • Záznamníky zámkov a DriverMatrix.
  • Všetky architektonické presety. runtimeRequireIsWhitelisted obsahuje whitelist Roundly, no vďaka $alsoAllow je použiteľný aj on.

Architektonické presety v aplikácii

noDebuggingLeftovers predvolene prehľadáva <cwd>/src, preto ho v aplikácii nasmerujte na app/:

<?php

declare(strict_types=1);

use RoundlyConsulting\Testing\Arch\ArchPresets;

// tests/ArchTest.php in a Laravel application
ArchPresets::strictTypes('App');
ArchPresets::noDebuggingLeftovers(srcDir: __DIR__.'/../app'); // the default scans <cwd>/src

Čisté PHPUnit: statické Assert

Každá expectation má statické zrkadlo v RoundlyConsulting\Testing\Assert pre testy postavené na triedach — vrátane toBeSwappableVia a kontraktu fasády. Obe volajú tú istú implementáciu, takže kontrola je rovnaká bez ohľadu na spôsob volania:

Pest expectationStatické zrkadlo
toHaveRunnableMigrationOrderAssert::migrationsRunInDependencyOrder($dir, $expectedForeignKeys, $tableResolvers, $externalTables)
toApplyOnConnectionAssert::migrationsApplyOnConnection($dir, $connection, $expectedMigrations)
toRejectBrokenOrderOnConnectionAssert::brokenOrderIsRejectedOnConnection($dir, $reorder, $connection)
toNotAutoLoadMigrationsAssert::doesNotAutoLoadMigrations($providerClass, $migrationsDir)
toPublishMigrationsTimestampedAssert::publishesMigrationsTimestamped($providerClass, $tag, $count)
toSatisfyConfigContractAssert::configContract($configPath, $srcDirs, $prefix, $options)
toLeakNoSecretsAssert::aboutSectionLeaksNoSecrets($section, $secrets, $mustRender)
toHonourModelSwapAssert::modelSwapHonoured($configKey, $subclass, $exercise, $expectsCreation)
toBeSwappableViaAssert::modelIsSwappableVia($model, $configKey)
toDocumentItsRootAssert::facadeDocumentsItsRoot($facade, $except)
toBeFakeableAssert::facadeIsFakeable($facade)
toReachEveryActionAssert::facadeReachesEveryAction($facade, $actionsDir, $except, $via)
use PHPUnit\Framework\Attributes\Test;
use RoundlyConsulting\Testing\Assert;
use Tests\TestCase;

final class SchemaTest extends TestCase
{
    #[Test]
    public function migrations_run_in_dependency_order(): void
    {
        Assert::migrationsRunInDependencyOrder(database_path('migrations'));
    }

    #[Test]
    public function the_services_config_ships_every_key_the_app_reads(): void
    {
        Assert::configContract(config_path('services.php'), app_path(), options: ['reverse' => false]);
    }
}

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.