[英]Event listener not dispatched while testing
我在控制器中触发了一个事件,该事件调度了一个发送电子邮件的侦听器。 我的代码在生产中运行良好。 但是,我目前正在为其编写一个测试用例(使用完整的http请求),但是事件监听器无法处理已触发的事件(已触发)。
如何在测试用例中激活侦听器? 我想念什么吗? 当我手动进行测试时,代码运行良好。
我将Laravel 5.4与PHP 7.1和PHPUnit一起使用。 我没有使用过Event::fake();
类的东西Event::fake();
这是我的代码的缩小版:
class OrderController extends Controller
{
public function store(Request $request): JsonResponse
{
$order = new Order($request->all());
$order->store();
event(new OrderStored($order));
// no problem here
return response()->json(['id' => $order->id()]);
}
}
--
class OrderStored
{
private $order;
public function __construct(Order $order)
{
$this->order = $order;
// this place is reachable
}
public function getOrder(): Order
{
return $this->order;
}
}
--
class SendOrderStoredEmail
{
private $mailer;
public function __construct(Mailer $mailer)
{
// this place is not reachable in my tests
$this->mailer = $mailer;
}
public function handle(OrderStored $event): void
{
$this->mailer->send(new OrderStoredMail($event->getOrder()));
}
}
最后是我的EventServiceProvider:
class EventServiceProvider extends BaseEventServiceProvider
{
protected $listen = [
OrderStored::class => [SendOrderStoredEmail::class],
];
}
Mail::fake();
将MailFake实例插入到我的侦听器中,因此类型提示失败。 使用Illuminate\\Contracts\\Mail\\Mailer
解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.