Testovanie
Requests::fake() podstrčí zaznamenávajúci fake za fasádu aj do kontajnera a vráti ho, takže naň narazí fasáda, fluentný builder aj každý RequestManager injektovaný cez konštruktor. Volania, ktoré menia stav, sa len zaznamenajú a databázy sa nedotknú — netreba ani ručné Event::fake(); canTransition() odpovedá naozaj:
use RoundlyConsulting\Requests\Facades\Requests;
it('submits an expense claim', function () {
$fake = Requests::fake();
$alice = User::factory()->create();
$request = Requests::make()->title('Expense')->create();
Requests::approve($request, $alice, 'Within budget');
$fake->assertCreated(1);
$fake->assertApproved($request, $alice, 'Within budget'); // or Requests::assertApproved(...)
$fake->assertNothingRejected();
});
it('submits nothing when the form is invalid', function () {
$fake = Requests::fake();
// …
$fake->assertNothingCreated();
});Všetky asercie
| Asercia | Prejde, keď |
|---|---|
assertCreated(?int $times = null) | bola vytvorená aspoň jedna žiadosť — alebo presne $times. |
assertNothingCreated() | nebola vytvorená žiadna žiadosť. |
assertApproved(Request, ?Model $actor, ?string $reason) | pre žiadosť bolo zavolané approve() — ak sú zadané, tak daným aktérom a s daným dôvodom. |
assertNothingApproved() | approve() nebolo zavolané ani raz. |
assertRejected(Request, ?Model $actor, ?string $reason) | to isté pre reject(). |
assertNothingRejected() | reject() nebolo zavolané ani raz. |
assertReopened(Request, ?Model $actor, ?string $reason) | to isté pre reopen(). |
assertNothingReopened() | reopen() nebolo zavolané ani raz. |
assertCancelled(Request) | pre žiadosť bolo zavolané cancel(). |
assertNothingCancelled() | cancel() nebolo zavolané ani raz. |
assertExpired(Request) | pre žiadosť bolo zavolané expire(). |
assertNothingExpired() | expire() nebolo zavolané ani raz. |
assertExpiredDue(?bool $dryRun = null) | prebehlo expireDue() — ak je zadaný, tak s daným príznakom skúšobného behu. |
assertNothingExpiredDue() | expireDue() neprebehlo ani raz. |
$fake = Requests::fake();
$fake->assertCreated(); // at least one — or assertCreated(2) for exactly two
$fake->assertApproved($request); // actor and reason are optional filters
$fake->assertRejected($request, $carol, 'Out of policy');
$fake->assertReopened($request, $alice);
$fake->assertCancelled($request);
$fake->assertExpired($request);
$fake->assertExpiredDue(); // expireDue() ran
$fake->assertExpiredDue(dryRun: true); // …as a dry run
// Every assertion has a negative twin
$fake->assertNothingCreated();
$fake->assertNothingApproved();
$fake->assertNothingRejected();
$fake->assertNothingReopened();
$fake->assertNothingCancelled();
$fake->assertNothingExpired();
$fake->assertNothingExpiredDue();Asercie zavoláte aj staticky na fasáde. create() na fake vráti neuložený Request naplnený stavom, typom, názvom, popisom a termínom a approve(), reject() a reopen() zaznamenajú aj odovzdaný dôvod. expireDue() vráti počet žiadostí po termíne, no žiadnu neexpiruje — takže sa zaznamená aj requests:expire spustený pod fakom.
Stavy factory
Model Request má factory so stavom pre každý status a pomocníkmi pre schvaľovateľov a autorov. requiring() uloží iba id schvaľovateľov — schvaľovaciu požiadavku neotvorí:
use RoundlyConsulting\Requests\Models\Request;
Request::factory()->pending()->create();
Request::factory()->approved()->create();
Request::factory()->rejected()->create();
Request::factory()->cancelled()->create();
Request::factory()->expired()->create(); // New, expires_at yesterday
Request::factory()->requiring([$alice->id, $bob->id])->create();
Request::factory()->authoredBy($user)->create();Proti skutočnému enginu
Pri integračných testoch načítajte migrácie balíka aj schvaľovacieho enginu a spustite skutočný tok:
use RoundlyConsulting\Requests\Enums\Status;
use RoundlyConsulting\Requests\Facades\Requests;
use RoundlyConsulting\Requests\Models\Request;
it('approves once both managers sign off', function () {
$alice = User::factory()->create();
$bob = User::factory()->create();
$request = Requests::make()->requireApprovalsFrom([$alice, $bob])->create();
Requests::approve($request, $alice);
expect($request->fresh()->status)->toBe(Status::New);
Requests::approve($request, $bob);
expect($request->fresh()->status)->toBe(Status::Approved);
});
it('expires stale requests', function () {
Request::factory()->expired()->create();
$this->artisan('requests:expire')
->expectsOutput('Expired 1 request(s).')
->assertSuccessful();
});Vlastné testy balíka spustíte príkazom:
composer testPrejavte 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.