通过phpUnit / Test中的服务使用帮助器呈现Twig

时间:2013-03-05 12:19:48

标签: symfony phpunit twig

我有服务。

manager.summary.order:
    class: Travelyo\CoreBundle\Services\Managers\Order\OrderSummaryManager
    arguments:
        template:       '@templating'
        router: '@router'

渲染html(使用twig),稍后将通过邮件发送或显示。

在我的Symfony2.1项目中使用此服务时,我没有任何问题。在这条树枝中,我有不同的电话,如app.request.locale& number_format_currency

在我的测试控制器中调用此服务时。

我收到了这个错误

Twig_Error_Runtime: An exception has been thrown during the rendering of a 
template ("You cannot create a service ("request") of an inactive scope
 ("request").") in "TravelyoCoreBundle:Mail:confirmation_mail.html.twig" at line 63.

这是我的控制器。

namespace Travelyo\ConfigurationBundle\Tests\Order;

use Travelyo\CoreBundle\Event\Order\OrderEvent;
use Travelyo\CoreBundle\Entity\Order\Order;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Travelyo\CoreBundle\Session\EtSession;
use Travelyo\CoreBundle\Services\Managers\OrderProcessManager;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class OrderSaveToDbTest extends WebTestCase {
    private $summaryManger;
    public function setUp()
    {
        static::$kernel = static::createKernel();
        static::$kernel->boot();
        $client = static::createClient();
        $client->request(
                'GET', '/clients/123456',
                array('SERVER_NAME' => 'travelyo'), /* request params */
                array(), /* files */
                array('X-Requested-With' => "XMLHttpRequest",'SERVER_NAME' => 'travelyo'));

        $this->summaryManger = static::$kernel->getContainer()->get('manager.summary.order');
    }

    public function testSaveAndSend()
    {
        $this->summaryManger->generateHml();

    }
}

知道怎么没有这个错误吗?

我尝试将scope = request添加到我的服务中。但是我的应用程序中的其他服务使用此服务

由于

1 个答案:

答案 0 :(得分:0)

要将请求发送到您的服务,请使您的服务yml

manager.summary.order:
class: Travelyo\CoreBundle\Services\Managers\Order\OrderSummaryManager
arguments:
    template:       '@templating'
    router: '@router'
    - "@service_container"

然后在您的服务文件中,您需要添加一个构造函数:

namespace Travelyo\ConfigurationBundle\Tests\Order;

class OrderSaveToDbTest extends WebTestCase {

    protected $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }

    /* the rest of your controller/service */
}

然后使用容器来获取请求非常简单:

$request = $this->container->get('request');

我可能有一些不完全正确,但它的一般想法。有关使用范围的更多信息,请查看此链接:http://symfony.com/doc/2.1/cookbook/service_container/scopes.html

相关问题