Symfony3.4测试环境中Fixture无法读取应用参数问题求助
解决LiipFunctionalTestBundle+AliceBundle测试中无法访问应用参数的问题
嘿,这个问题我之前也碰到过!核心原因是AliceBundle在测试环境下默认没法直接读取Symfony容器里的参数,咱们分两种方案来解决:
方案一:配置AliceBundle使用Symfony表达式语言
直接在测试环境的配置文件里给AliceBundle指定Symfony风格的表达式语言,这样它就能识别<{img_url}>这种参数引用了:
# config_test.yml hautelook_alice: expression_language: hautelook_alice.expression_language.symfony
配置完之后,你的fixture里的<{img_url}>就能正常解析成config.yml里定义的参数值了。记得确保config_test.yml已经导入了config.yml的配置,比如顶部有:
imports: - { resource: config.yml }
方案二:手动在测试中传递参数
如果上面的配置没生效,或者你需要更灵活的参数传递,可以在测试代码里手动获取容器参数,再传给fixture加载器:
// MyTest.php use Liip\FunctionalTestBundle\Test\WebTestCase; use Hautelook\AliceBundle\PhpUnit\RefreshDatabaseTrait; class MyTest extends WebTestCase { use RefreshDatabaseTrait; public function testYourFunctionality() { // 从Symfony容器获取参数 $imgUrl = $this->getContainer()->getParameter('img_url'); // 加载fixture时传入参数上下文 $fixtures = $this->loadFixtures( ['@AppBundle/DataFixtures/ORM/my-fixture.yml'], null, [ 'parameters' => [ 'img_url' => $imgUrl ] ] )->getReferenceRepository(); // 这里写你的测试逻辑... } }
这样Alice在解析fixture的时候,就能拿到你手动传递的img_url参数了。
额外检查点
- 确认测试环境下
img_url参数确实存在:可以在测试里临时加一行var_dump($this->getContainer()->getParameter('img_url'));验证一下,如果能输出值,说明参数是存在的,只是Alice没拿到而已。 - 确保LiipFunctionalTestBundle和AliceBundle的版本和Symfony3.4兼容,毕竟Symfony3.4是老版本,对应依赖的版本也要匹配哦。
内容的提问来源于stack exchange,提问作者Pierre de LESPINAY
相关产品推荐
相关产品推荐

