如何测试作业失败功能

时间:2020-07-05 22:22:28

标签: laravel queue jobs

我有这份工作:

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方法中的代码,以确保当作业失败时文件的状态将更改。

0 个答案:

没有答案
相关问题