我在尝试运行的测试中遇到了一个奇怪的问题。我正在使用sqs消息订阅主题。消息已得到处理并通过了测试,但是测试完成后,数据库上没有任何更改。教义上没有例外,什么也没有。只有在使用sqs时才会发生。我创建了一个控制器组件来测试不同的端点,它工作正常,并且可以看到数据库中的更改。
我正在使用代码接收来设置sqs消息。 SqsService类接收消息并在我调用QUEUE之后返回给我。我有一个命令类,当我从测试中运行队列时会被调用:
runSymfonyConsoleCommand('queue:<command>', ['--queue' => <queue-name>])
之后,我想在我的服务类下通过简单地执行此操作来处理消息以对数据库执行更改:
$this->repository->remove($entity);
$this->repository->flush();
我在服务中注入了一个接口,作为我的实体存储库的适配器,它扩展了实体管理器。
一切正常,只是在数据库中没有预期的更改。我已经检查了所有教义配置,它们都已正确设置。我正在使用Symfony 4.3.9
有人知道什么可能导致此问题吗?
事实证明,这是将代码分配给理论的事件的代码接收的简单组成部分。参见,使用编解码方法时:
runSymfonyConsoleCommand();
您基本上是在告诉Doctor在UnitOfWork满足sql命令后回滚数据库更改。因此他们没有完全承诺。
我的解决方法是使用名为CLI的代码接收模块:https://codeception.com/docs/modules/Cli#seeShellOutputMatches
方法:
runShellCommand($command);
尽管,如果您期望从命令执行中返回一个值,则应该只使用内置的PHP方法:
shell_exec();
代码接收方法使用exec();在引擎盖下,因此默认情况下返回null。
我希望这可以帮助社区,谢谢。