Skip to content

Commit ebaa3fb

Browse files
authored
fix: handle errors in closures (#17)
* fix: handle errors in closures * test: add test
1 parent 8b793e0 commit ebaa3fb

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/JobPipeline.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public function handle(): void
7272
try {
7373
$result = app()->call($job);
7474
} catch (Throwable $exception) {
75-
if (method_exists(get_class($job[0]), 'failed')) {
75+
if (is_array($job) && method_exists(get_class($job[0]), 'failed')) {
7676
call_user_func_array([$job[0], 'failed'], [$exception]);
7777
} else {
7878
throw $exception;

tests/JobPipelineTest.php

+17
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Stancl\JobPipeline\Tests;
44

5+
use Exception;
56
use Illuminate\Database\Eloquent\Model;
67
use Illuminate\Support\Facades\Event;
78
use Illuminate\Support\Facades\Queue;
@@ -193,6 +194,22 @@ function (TestModel $model) use (&$passes) {
193194

194195
$this->assertTrue($passes);
195196
}
197+
198+
/** @test */
199+
public function failures_in_closures_will_throw_correctly()
200+
{
201+
$this->expectExceptionMessage('foobar');
202+
203+
Event::listen(TestEvent::class, JobPipeline::make([
204+
function () {
205+
throw new Exception('foobar');
206+
}
207+
])->send(function (TestEvent $event) {
208+
return $this->valuestore;
209+
})->shouldBeQueued(false)->toListener());
210+
211+
event(new TestEvent(new TestModel()));
212+
}
196213
}
197214

198215
class FooJob

0 commit comments

Comments
 (0)