【发布时间】:2021-05-06 23:51:15
【问题描述】:
在某个观察者类中,我有这段代码
//Just for context
public function updated () {
Artisan::queue('campaign:resume', ['campaignId' => $campaign->id]);
}
目的是在条件满足时测试该命令是否确实在排队。 我尝试了几种方法,但据我所知, Queue::fake() 不会影响 queue 方法,并且似乎无法找到使用 Bus::fake 来断言此排队命令的方法。
这是我测试过的,评论是我尝试过的。再次,观察者的内容被简化,因为它无关紧要。
public function testSomeClassShouldQueueACommand() {
//Arrange
//Queue::fake();
//$fakeBus = Bus::fake();
$campaignObserver = new CampaignObserver();
//$this->app->instance(\Illuminate\Foundation\Bus\PendingDispatch::class, $fakeBus);
//Act
$campaignObserver->updated();
//Assert
//Bus::assertDispatched('campaign:resume');
//Queue::assertPushed('campaign:resume');
//Artisan::shouldReceive('queue')->with('campaign:resume');
}
我看到一些帖子说:只需将其传递给工作或活动并使用Queue::fake/Event::fake。
它的内容不应该在 Job 或 Event 中。如果 Artisan 可以自己处理队列,那么创建一个类来处理命令的“队列”是没有意义的。
关于如何完成这个单元测试有什么想法吗?
【问题讨论】:
标签: laravel mocking phpunit laravel-6 mockery