为了账号安全,请及时绑定邮箱和手机立即绑定

symfony + codeception - 无法抓取新服务

symfony + codeception - 无法抓取新服务

PHP
Smart猫小萌 2022-07-29 11:03:39
我有以下设置:Symfony 5 项目,带有 codeception 4。我正在尝试为新创建的服务创建测试。问题是我在尝试测试时收到以下错误。Test  tests/integration/Shop/NewServiceCest.php:testSomethingStep  Grab service "App\Service\NewService"Fail  Service App\Service\NewService is not available in container服务代码如下(基本上是空的):<?phpnamespace App\Service;class NewService{    public function __construct()    {    }}测试代码如下(同样,基本上是空的):<?phpnamespace App\Tests\Integration\New;use App\Exception\NewException;use App\Service\NewService;use App\Tests\IntegrationTester;class NewServiceCest {    private NewService $newService;    public function _before(IntegrationTester $i) {        $this->newService = $i->grabService(NewService::class);    }    public function testSomething(IntegrationTester $i) {        // $i->expectThrowable(NewException::class, $this->newService->doStuff('invalidArgument'));    }}集成测试 yml:actor: IntegrationTestermodules:    enabled:        - Symfony:              app_path: 'src'              environment: 'test'        - Doctrine2:              depends: Symfony              cleanup: true              dump: 'tests/_data/integration.sql'              populate: true              reconnect: true        - \App\Tests\Helper\Integration        - Asserts我试图清除缓存,重新创建它等等。我能从 cli 中想到的一切,包括(当前路径是项目目录):$./bin/console c:c$./bin/console c:c --env=test$rm -rf var (this should do nothing but still tried it)$rm -rf tests/_support/_generated$./bin/console cache:warmup --env=test$./vendor/bin/codecept build当我运行测试时,同样的问题。使它起作用的是将服务注入某处(例如在控制器中),执行控制器,然后使用 ./vendor/bin/codecept 构建。在我完成这些步骤之后,测试按预期工作。一个明显的问题是我正在尝试创建一个用于部署的管道,在该管道中我提出了一个测试环境(干净,在部署到服务器之前运行中),运行测试,并确保一切正常。将所有服务注入某个地方只是为了能够构建不是一种选择(但我可以接受任何 cli 选项,包括运行大多数命令)。更奇怪的是,在我这样做之后,即使我清理了缓存(var 和 _generated),现在测试也能按预期工作。就像它会将某些东西保存在我似乎找不到的不同地方(找不到任何相关的配置,而 google 和 bing 让我失望了)。那么......为什么会发生这种情况,我怎样才能可靠地让它工作?
查看完整描述

2 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

问题是,Symfony 将从编译的容器中删除未使用的服务。我推荐这个问题以获取更多信息:https ://github.com/symfony/symfony-docs/issues/9890


查看完整回答
反对 回复 2022-07-29
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

观察到相同的行为。$I->grabService(NewService::class)只要您不在代码中的其他地方使用此服务(例如注入某些控制器等),新创建的服务在 codeception 中不可用。

查看完整回答
反对 回复 2022-07-29
  • 2 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号