1

backoff()メソッドのおかげで指数関数的に後退するキュージョブクラスがあります。backoff()その方法が正しく機能することをテストしたいと思います。2, 4, 8, 16再試行するたびに作成する必要があります。attempts()function は trait に属しInteractsWithQueue、より深いRedisJobクラスのdecodedペイロードから試行回数を読み取るため、これをテストする適切な方法が見つかりませんでした。

何か助けはありますか?

class AJob implements ShouldQueue
{
    use Dispatchable;
    use InteractsWithQueue;
    use Queueable;
    use SerializesModels;

    public $tries = 10; 

    public function backoff()
    {
        return pow(2, $this->attempts());
    }

    public function handle()
    {
        try{
            //Some logic
        }
        catch(Exception $e){
            $this->release($this->backoff());
        }
    }   
}
4

1 に答える 1

2

問題を解決しました。これが解決策です。

public function test_backoff_after_fifth_attempt()
    {
        /** @var RedisJob $mockRedisJob */
        $mockRedisJob = $this->mock(
            RedisJob::class,
            function (MockInterface $mock) {
                $mock->shouldReceive('attempts')->once()
                     ->andReturn(5);
            }
        );

        $job = new SendMailJob(new Mail());
        $job->setJob($mockRedisJob);

        $this->assertEquals(32, $job->backoff());
    }
于 2020-12-19T16:22:03.083 に答える