remarkablemark / rector-laravel-service-mocking
Rector to replace deprecated Laravel service mocking testing methods
Fund package maintenance!
remarkablemark
Patreon
Ko Fi
Liberapay
b.remarkabl.org/teespring
Requires
- php: >=7.4
Requires (Dev)
- friendsofphp/php-cs-fixer: 3.50.0
- phpunit/phpunit: 10.5.11
- rector/rector: 0.19.1
- symplify/rule-doc-generator: 12.1.1
README
Rector to replace deprecated Laravel service mocking testing methods such as expectsEvents
, expectsJobs
, and expectsNotifications
.
From Laravel 10:
The deprecated
MocksApplicationServices
trait has been removed from the framework. This trait provided testing methods such asexpectsEvents
,expectsJobs
, andexpectsNotifications
.If your application uses these methods, we recommend you transition to
Event::fake
,Bus::fake
, andNotification::fake
, respectively. You can learn more about mocking via fakes in the corresponding documentation for the component you are attempting to fake.
Requirements
PHP >=7.4
Install
Install with Composer:
composer require --dev rector/rector remarkablemark/rector-laravel-service-mocking
Usage
Register the rule in rector.php
:
<?php declare(strict_types=1); use Rector\Config\RectorConfig; use Remarkablemark\RectorLaravelServiceMocking\LaravelServiceMockingRector; return static function (RectorConfig $rectorConfig): void { $rectorConfig->paths([ __DIR__ . '/tests', ]); $rectorConfig->rule(LaravelServiceMockingRector::class); };
See the diff:
vendor/bin/rector process --dry-run
Apply the rule:
vendor/bin/rector process
Clear the cache and apply the rule:
vendor/bin/rector process --clear-cache
Rule
Before
$this->expectsEvents([MyEvent::class]);
After
\Illuminate\Support\Facades\Event::fake([MyEvent::class])->assertDispatched([MyEvent::class]);
The test may still fail because of assertDispatched
so it's recommended to refactor to:
Event::fake([MyEvent::class]); // dispatch your event here... Event::assertDispatched(MyEvent::class);
If you have multiple events, call assertDispatched
for each event:
Event::fake([MyEvent1::class, MyEvent2::class]); // ... Event::assertDispatched(MyEvent1::class); Event::assertDispatched(MyEvent2::class);