Dim*_*las 7 php jobs laravel laravel-5.7
我有以下 Laravel 控制器:
namespace App\Controller;
use App\Jobs\MyJob;
class JobDispatchControler
{
public function callJob(Request $request)
{
MyJob::dispatch();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的控制器有以下路由:
Route::get('/job',"\App\Controller\JobDispatchControler@callJob");
Run Code Online (Sandbox Code Playgroud)
我想测试我是否拨打电话/job将分派MyJob工作:
namespace Test\App\MyJob;
use Illuminate\Foundation\Testing\TestCase;
use Illuminate\Support\Facades\Queue;
use App\Jobs\MyJob;
class TestDispatchJob extends TestCase
{
public function testJobDispatch()
{
Queue::fake();
self::get("/job");
Queue::assertPushed(MyJob::class);
}
}
Run Code Online (Sandbox Code Playgroud)
但是一旦我通过 phpunit 运行测试,我就会收到以下错误:
Time: 4.63 seconds, Memory: 34.00 MB
There was 1 failure:
1) Test\App\MyJob::testJobDispatch
The expected [App\Jobs\MyJob] job was not pushed.
/var/www/html/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php:33
/var/www/html/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:237
/var/www/html/tests/App/MyJob/TestDispatchJob.php:26
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
Run Code Online (Sandbox Code Playgroud)
你知道我为什么不能断言我的工作没有被派遣吗?
根据这篇文章我将测试更改为:
namespace Test\App\MyJob;
use Illuminate\Foundation\Testing\TestCase;
use Illuminate\Support\Facades\Bus;
use App\Jobs\MyJob;
class TestDispatchJob extends TestCase
{
public function testJobDispatch()
{
Bus::fake();
self::get("/job");
Bus::assertDispatched(MyJob::class);
}
}
Run Code Online (Sandbox Code Playgroud)
并且仍然出现以下错误:
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
Time: 4.63 seconds, Memory: 34.00 MB
There was 1 failure:
1) Test\App\MyJob::testJobDispatch
The expected [App\Jobs\MyJob] job was not dispatched.
/var/www/html/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php:32
/var/www/html/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:237
/var/www/html/tests/App/MyJob/TestDispatchJob.php:26
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
Run Code Online (Sandbox Code Playgroud)
但是,一旦没有触发get任意调度方法,工作似乎就可以正常工作:
namespace Test\App\MyJob;
use Illuminate\Foundation\Testing\TestCase;
use Illuminate\Support\Facades\Bus;
use App\Jobs\MyJob;
class TestDispatchJob extends TestCase
{
public function testJobDispatch()
{
Bus::fake();
MyJob::dispatch();
Bus::assertDispatched(MyJob::class);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 0
你试过用$this而不是这样做吗self?这样作业应该被调度。c
public function testJobDispatch()
{
Bus::fake();
$response = $this->get('/job');
Bus::assertDispatched(MyJob::class);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1619 次 |
| 最近记录: |