我有这份工作:
class ProcessFileJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $file;
public function __construct(File $file)
{
$this->file = $file;
}
public function handle()
{
$this->file->update([
'status' => 'procssing',
]);
$this->start();
$this->file->update([
'status' => 'success',
]);
}
public function failed(Exception $exception)
{
$this->file->update([
'status' => 'un-procssed',
]);
}
protected function start()
{
return true;
}
}
我正在尝试测试failed
方法中的代码:
/** @test */
public function it_will_set_status_to_un_procssed_when_failing()
{
$file = factory(File::class)->create();
$mock = Mockery::mock(ProcessFileJob ::class, [$file])->shouldAllowMockingProtectedMethods()->makePartial();
$mock->shouldReceive('start')->once()->andThrow(new CustomException('test'));
$mock->handle($file);
$this->assertEquals('un-processed', $file->fresh()->status);
}
但是这将始终抛出CustomException
并且测试将失败。即使我使用withExceptionHandling
方法也是如此。我只想测试failed
方法中的代码,以确保当作业失败时文件的状态将更改。