Magento 2: Как протестировать observer (вызвать event)?
Столкнулся с тем, что понадобилось протестировать observer для модуля PayPal в Magento 2. Настраивать песочницу, а тем более дергать реальные методы совсем не хотелось, поэтому решил дернуть нужный мне event напрямую..
Итак, навешиваем observer в своем модуле, так как описано в мануале на оф сайте
в файл app/code/Company/Support/etc/events.xml добавляем нужныое событие
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="paypal_express_place_order_success"> <observer name="PaypalExpressPlaceOrderSuccessLogger" instance="Company\Support\Observer\PaypalExpressPlaceOrderSuccessLogger" disabled="false"/> </event> </config> |
затем создаем сам обработчик app/code/Ewave/Support/Observer/PaypalExpressPlaceOrderSuccessLogger.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<?php namespace Ewave\Support\Observer; use Magento\Framework\Event\ObserverInterface; class PaypalExpressPlaceOrderSuccessLogger implements ObserverInterface { /** * PaypalExpressPlaceOrderSuccessLogger constructor. */ public function __construct() { // тут конструктор и объекты которые надо создать для работы } /** * @param \Magento\Framework\Event\Observer $observer * @return bool|void * @throws \Magento\Framework\Exception\LocalizedException */ public function execute(\Magento\Framework\Event\Observer $observer) { /** @var \Magento\Sales\Model\Order $order */ $order = $observer->getData('order'); /** @var \Magento\Quote\Model\Quote $quote */ $quote = $observer->getData('quote'); if (!$order || !$quote) { return false; } // тут остальная логика } } |
и вот теперь наш обработчик готов, надо его как-то протестировать сделать это можно создав файл в корне, например test-paypal.php с таким содержимым
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); ini_set('memory_limit', '5G'); error_reporting(E_ALL); require 'app/bootstrap.php'; $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER); $objectManager = $bootstrap->getObjectManager(); /** @var $state \Magento\Framework\App\State */ $state = $objectManager->get(\Magento\Framework\App\State::class); $state->setAreaCode(\Magento\Framework\App\Area::AREA_GLOBAL); /** @var $order \Magento\Sales\Model\OrderRepository */ $orderRepository = $objectManager->create(\Magento\Sales\Model\OrderRepository::class); $order = $orderRepository->get(942195); // нужный ордер /** @var $quote \Magento\Quote\Model\QuoteRepository */ $quoteRepository = $objectManager->create(\Magento\Quote\Model\QuoteRepository::class); $quote = $quoteRepository->get(3529710); // нужная квота $eventManager = $objectManager->create(\Magento\Framework\Event\Manager::class); // вызываем нужный эвент $eventManager->dispatch( 'paypal_express_place_order_success', [ 'order' => $order, 'quote' => $quote ] ); |
сам вызов эвента, нужно найти в коде и передать ему такие же параметры, например используемый мной находится в файле vendor/magento/module-paypal/Controller/Express/AbstractExpress/PlaceOrder.php в методе execute
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public function execute() { ... $this->_eventManager->dispatch( 'paypal_express_place_order_success', [ 'order' => $order, 'quote' => $this->_getQuote() ] ); ... } |
После создания файла для запуска тестов, его можно вызывать из консоли
1 2 3 |
php test-paypal.php |
Таким образом, вы можете протестировать ваш observer до того, как запускать его в работающем окружении.
Author: | Tags: /
| Rating:
Leave a Reply