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 expectation | Statické zrkadlo |
|---|---|
toHaveRunnableMigrationOrder | Assert::migrationsRunInDependencyOrder($dir, $expectedForeignKeys, $tableResolvers, $externalTables) |
toApplyOnConnection | Assert::migrationsApplyOnConnection($dir, $connection, $expectedMigrations) |
toRejectBrokenOrderOnConnection | Assert::brokenOrderIsRejectedOnConnection($dir, $reorder, $connection) |
toNotAutoLoadMigrations | Assert::doesNotAutoLoadMigrations($providerClass, $migrationsDir) |
toPublishMigrationsTimestamped | Assert::publishesMigrationsTimestamped($providerClass, $tag, $count) |
toSatisfyConfigContract | Assert::configContract($configPath, $srcDirs, $prefix, $options) |
toLeakNoSecrets | Assert::aboutSectionLeaksNoSecrets($section, $secrets, $mustRender) |
toHonourModelSwap | Assert::modelSwapHonoured($configKey, $subclass, $exercise, $expectsCreation) |
toBeSwappableVia | Assert::modelIsSwappableVia($model, $configKey) |
toDocumentItsRoot | Assert::facadeDocumentsItsRoot($facade, $except) |
toBeFakeable | Assert::facadeIsFakeable($facade) |
toReachEveryAction | Assert::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 kryptomienOdoslaní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.