gpt4 book ai didi

php - 测试队列功能?

转载 作者:行者123 更新时间:2023-12-02 05:50:39 25 4
gpt4 key购买 nike

根据Laravel Documentation ,我可以使用Queue::fake();防止作业排队。

尚不清楚如何在未排队的情况下测试(PHPUnit)作业类中的一些方法。

例如:

class ActionJob extends Job
{
public $tries = 3;
protected $data;

public function __construct($data)
{
$this->data = $data;
}


public function handle()
{
if ($this->data['action'] == "deleteAllFiles") {
$this->deleteAllFiles();
}
}

protected function deleteAllFiles()
{
//delete all the files then return true
// if failed to delete return false
}
}

这是我想测试的示例deleteAllFiles() - 我需要 mock 它吗?

最佳答案

使用假货的想法是它们是 mock 的替代品。所以,是的,如果你想模拟 deleteAllFiles() 被调用,那么我不相信你可以用假的来做到这一点。

但是,您可以断言作业中存在特定属性。

有一件事,它不在您的示例中,但请确保您的工作正在实现 \Illuminate\Contracts\Queue\ShouldQueue

类似这样的事情

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

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

public $tries = 3;

public $data; // Make sure this public so you can access it in your test

public function __construct($data)
{
$this->data = $data;
}


public function handle()
{
if ($this->data['action'] == "deleteAllFiles") {
$this->deleteAllFiles();
}
}

protected function deleteAllFiles()
{
// do stuff
}
}

然后在您的测试中:

// ActionJobTest.php
Queue::fake();

// Do some things to set up date, call an endpoint, etc.

Queue::assertPushed(ActionJob::class, function ($job) {
return $job->data['action'] === 'deleteAllFiles';
});

如果您想在作业中对 $data 进行断言,那么您可以进行一些其他状态更改并在闭包中对其进行断言。

旁注:如果作业是可调度的,您也可以这样断言:

// ActionJobTest.php
Bus::fake();

// Do some things to set up date, call an endpoint, etc.

Bus::assertDispatched(ActionJob::class, function ($job) {
return $job->data['action'] === 'deleteAllFiles';
});

关于php - 测试队列功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46503364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com