当前位置: 首页 > 知识库问答 >
问题:

Symfony 4中的功能测试事件和订阅服务器

公冶桐
2023-03-14

我需要对Symfony 4中的a用户进行功能测试,但我很难找到方法。订阅服务器具有以下结构

/**
* Class ItemSubscriber
*/
class ItemSubscriber implements EventSubscriberInterface
{
    /**
     * @var CommandBus
     */
    protected $commandBus;

    /**
     * Subscriber constructor.
     *
     * @param CommandBus $commandBus
     */
    public function __construct(CommandBus $commandBus)
    {
        $this->commandBus = $commandBus;
    }

    /**
     * {@inheritdoc}
     */
    public static function getSubscribedEvents()
    {
        return [
            CommandFailedEvent::NAME => 'onCommandFailedEvent',
        ];
    }

    /**
     * @param CommandFailedEvent $event
     *
     * @throws Exception
     */
    public function onCommandFailedEvent(CommandFailedEvent $event)
    {
        $item = $event->getItem();
        $this->processFailed($item);
    }

    /**
     * Sends message 
     *
     * @param array $item
     *
     * @throws Exception
     */
    private function processFailed(array $item)
    {
        $this->commandBus->handle(new UpdateCommand($item));
    }
}

订阅者的流正在接收内部事件,并通过命令总线通过 rabbit 将消息发送到另一个项目。

如何测试调度事件命令失败是否执行了进程中的行失败(数组$item)

有人有关于在Symfony 4中测试事件和订阅者的最佳实践的文档吗?

共有1个答案

黄景胜
2023-03-14

如果您想测试正在调用的命令总线处理程序的过程,您可以通过模拟期望测试依赖方法调用。您在PHPUnit留档中有一些示例。

例如,您可能会看到这样的内容:

$commandBus = $this->getMockBuilder(CommandBus::class)->disableOriginalConstructor()->getMock();
$commandBus->expects($this->once())->method('handle');

// Create your System Under Test
$SUT = new CommandFailedSubscriber($commandBus);

// Create event
$item = $this->getMockBuilder(YourItem::class)->getMock();
$event = new CommandFailedEvent($item);

// Dispatch your event
$dispatcher = new EventDispatcher();
$dispatcher->addSubscriber($SUT);
$dispatcher->dispatch($event);

我希望这足以让您探索可能性并获得您的功能所需的覆盖范围。

祝你测试愉快!

 类似资料:
  • Node.js应用程序可以使用composer-client.BusinessNetworkConnection.onAPI调用从业务网络订阅事件。事件在业务网络模型文件中定义,并由交易处理函数文件中的指定交易处理。有关发布事件的更多信息,请参阅发布事件。 在你开始之前 在应用程序可以订阅事件之前,你必须定义一些事件和发送它们的交易。还必须部署业务网络,并且必须具有可连接到该业务网络的连接配置文件

  • 我部署服务器发送事件资源与泽西2.41/Java7/tomcat 7. 我得到的错误是 2013年12月16日凌晨4:04:40组织。阿帕奇。卡塔琳娜。果心StandardWrapperValve:Servlet。路径为[/trackapp]的上下文中servlet[ServletAdapter]的服务()引发异常[java.lang.UnsupportedOperationException:s

  • 我正在开发一个web应用程序,我遵守REST API标准。我正在搜索REST API的最佳实践订阅和付款。 当新用户订阅“PRO计划”时,用户需要支付计划费用,这是一个交易。 对于升级、取消或更新计划,是否应设置put:和或其他endpoint?

  • 来自第三次订阅的消息会发生什么情况,是否会在TTL之后发送到死信队列 有没有办法找出消息未被使用的订阅

  • 我有一个使用ActiveMQ的JMS生产者/订阅者的简单Spring应用程序,配置如下: 我试过所有可能的解决办法,但没有一个奏效。我们非常感谢任何帮助

  • 问题内容: 目前,我发现黄瓜测试套件按字母顺序运行功能文件。 请让我知道我是否可能缺少任何选项/配置。谢谢。 问题答案: 在黄瓜4.2.0中添加了cli选项,请参见changelog和本示例。