Testing WebTestCase不会自动加载@Route注释
当使用Testing WebTestCase不会自动加载@Route注释,testing,symfony,annotations,routes,Testing,Symfony,Annotations,Routes,当使用WebTestCase类进行功能测试时,@Route注释不起作用 我的控制器如下所示: <?php namespace Foo\ShopBundle\Controller; use Foo\ShopBundle\Entity\Cart; use Foo\ShopBundle\Entity\ProductInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sensio\Bundle\F
WebTestCase
类进行功能测试时,@Route
注释不起作用
我的控制器如下所示:
<?php
namespace Foo\ShopBundle\Controller;
use Foo\ShopBundle\Entity\Cart;
use Foo\ShopBundle\Entity\ProductInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
/**
* @Route("cart")
*/
class CartController extends Controller
{
const CART_ID = 'cart_id';
/**
* @Route("/")
* @Template()
*/
public function indexAction()
{
return array('cart' => $this->getCart($this->getCurrentUserName(), $this->getCurrentSessionId()));
}
...
?>
有没有办法解决这个问题?尝试将它添加到setUp()方法中(别忘了定义$vendorDir)
尝试将其添加到setUp()方法中(不要忘记定义$vendorDir)
虽然这个问题已经很老了,但我想补充一点: 请确保在测试期间始终指向phpunit.xml(.dist)文件 这意味着:
# OK
phpunit -c app/ src/MyNamespace/Bundlee/MyBundle/Controller/MyControllerTest.php
会有用的
但是,在命令中删除-c app
将中断测试运行程序,因为Symfony无法按其应该的方式启动:
# ERROR
phpunit src/MyNamespace/Bundlee/MyBundle/Controller/MyControllerTest.php
在后一种情况下,自动加载无法正常初始化,因此无法正确注册条令注释
设置方法中提到的“调整”不再需要 虽然这个问题很老,但我想补充一点: 请确保在测试期间始终指向phpunit.xml(.dist)文件 这意味着:
# OK
phpunit -c app/ src/MyNamespace/Bundlee/MyBundle/Controller/MyControllerTest.php
会有用的
但是,在命令中删除-c app
将中断测试运行程序,因为Symfony无法按其应该的方式启动:
# ERROR
phpunit src/MyNamespace/Bundlee/MyBundle/Controller/MyControllerTest.php
在后一种情况下,自动加载无法正常初始化,因此无法正确注册条令注释
设置方法中提到的“调整”不再需要 检查phpunit.xml.dist文件。引导参数应该指向文件
/autoload.php
(假设该文件位于Symfony应用程序目录中)。
如果您的引导值为
。/vendor/autoload.php
则您没有注册“loadClass”。请检查您的phpunit.xml.dist文件。引导参数应该指向文件/autoload.php
(假设该文件位于Symfony应用程序目录中)。
如果您的引导值为
。/vendor/autoload.php
则您没有注册“loadClass”。我遇到了相同的问题。事实证明,我的phpunit.xml中包含以下内容:
<phpunit backupGlobals="false"
...
bootstrap="vendor/autoload.php">
将bootstrap
的值更改为app/bootstrap.php.cache
为我解决了这个问题。注释加载程序现在已正确注册
如果您查看一下,您将看到默认的Symfony应用程序也使用这个文件作为PHPUnit引导
请注意,我的phpunit.xml位于项目的根目录中,而不是
app
目录中。如果phpunit.xml文件位于app
目录中,您可以简单地使用bootstrap.php.cache
我遇到了相同的问题。事实证明,我的phpunit.xml中包含以下内容:
<phpunit backupGlobals="false"
...
bootstrap="vendor/autoload.php">
将bootstrap
的值更改为app/bootstrap.php.cache
为我解决了这个问题。注释加载程序现在已正确注册
如果您查看一下,您将看到默认的Symfony应用程序也使用这个文件作为PHPUnit引导
请注意,我的phpunit.xml位于项目的根目录中,而不是
app
目录中。如果phpunit.xml文件位于app
目录中,您可以简单地使用bootstrap.php.cache
,但是我很好奇为什么需要这样做。WebTestCase正在引导整个AppKernel。由于应用程序在浏览器中运行良好,我希望这里不会有任何差异。我也有同样的问题,我不知道为什么注释在测试环境和浏览器中都不起作用。所以我找到了这个解决方法。但是我很好奇为什么这是必要的。WebTestCase正在引导整个AppKernel。由于应用程序在浏览器中运行良好,我希望这里不会有任何差异。我也有同样的问题,我不知道为什么注释在测试环境和浏览器中都不起作用。因此,我们找到了这个解决方法。