繁体   English   中英

测试期间未调度事件监听器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM