#php #laravel #unit-testing #phpunit #laravel-jobs
#php #laravel #модульное тестирование #phpunit #laravel-jobs
Вопрос:
У меня есть класс заданий в очереди, который экспоненциально отступает благодаря backoff()
методу. Я хочу проверить, что backoff()
метод работает правильно. Она должна создаваться 2, 4, 8, 16
и так далее после каждой повторной попытки. Поскольку attempts()
функция принадлежит 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());
}
}
}
Ответ №1:
Я решил проблему. Вот решение.
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());
}