测试作业是否手动失败的正确方法是什么?

问题描述 投票:0回答:0

在 Laravel 应用程序中,如果不满足某些条件,我想手动失败。代码工作正常,因为工作做了它应该做的,但为了安全起见,我想写一个功能测试。

这是工作的简化版本:

class ExampleJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function handle()
    {
        // Some initial logic

        if (! $foo->exampleMethod()) {
            event(new ExampleEvent($foo));
            $this->fail();
        }

        // Some final logic which I expect not to be reached if the job should fail

        dd('You should not get here');
    }
}

这是我现在的测试:

/** @test */
public function foo()
{
    Event::fake();

    Bus::fake();

    ExampleJob::dispatch();

    Queue::after(function (ExampleJob $event) {
        $this->assertTrue($event->job->hasFailed());
    });

    Event::assertDispatched(ExampleEvent::class);
}

测试作业是否手动失败的正确方法是什么?

我尝试了几种方法,但都没有用。

似乎在测试中,代码执行在

$this->fail()
语句之后继续并到达
dd()
语句。

laravel queue jobs
© www.soinside.com 2019 - 2024. All rights reserved.