Process Facade Coming to Laravel 10
Published on by Paul Redmond
Laravel 10, due out next week, will introduce a Process
layer for Laravel. Like the HTTP facade makes working with APIs a cinch, the Process service will make working with, testing, and running CLI processes a dream to work with. You can see the basic usage of this feature in the following example from Pull Request #45314 by Taylor Otwell:
use Illuminate\Support\Facades\Process; $result = Process::run('ls -la'); $result->successful();$result->failed();$result->exitCode();$result->output();$result->errorOutput();$result->throw();$result->throwIf($condition);
The Process layer includes rich features out of the box, such as:
- Fluent process methods to build a process instance before running it
- Process output handling as it is received
- Asynchronous processes
- Process Pools
- Rich testing features via
fake()
- Preventing stray processes during tests
Testing processes has never been easier, and I am excited for the code API around testing processes that you run in your applications:
Process::fake([ 'ls *' => Process::result('Hello World'),]); $result = Process::run('ls -la'); Process::assertRan(function ($process, $result) { return $process->command == 'ls -la';}); Process::assertRanTimes(function ($process, $result) { return $process->command == 'ls -la';}, times: 1); Process::assertNotRan(function ($process, $result) { return $process->command == 'cat foo';});
Check out Pull Request #45314 for implementation details and plenty of examples. This feature will surely be documented with the release of Laravel 10. A hat tip to Nuno Maduro and Taylor Otwell for adding Process to Laravel 10, it looks amazing!