检查symfony2中是否安装了资产

时间:2012-10-22 02:02:21

标签: php symfony

我正在尝试运行单元测试,检查资产是否已正确安装。 我只是向现有文件发出请求并检查是否没有错误:

$client = static::createClient();
$client->request('GET', '/bundles/mybundle/css/bg.css');
$this->assertFalse($client->getResponse()->isNotFound(), "Assets seem to not be installed");

不幸的是,在使用Response实例进行检查后,它总是尝试使用路径到达某种控制器:

找不到“GET /bundles/mybundle/css/bg.css”的路线

有没有办法在不通过路由系统的情况下在这里发出纯粹的请求?

2 个答案:

答案 0 :(得分:2)

您需要使用实际的HTTP客户端(您用于功能测试的客户端实现实际上不会发出HTTP请求)来发出请求,但您似乎正在以错误的方式接近它。安装资产应该是部署后部署脚本的一部分 - 因此,测试总是(或者有时取决于开发框的配置,但重点是它是部署/暂存细节)无论如何都会失败。只需在部署过程中使用您想要的任何语言进行简单测试,以确保正确安装资产。

简化示例

<?php
system('git clone myrepo');
echo 'Pulled codebase';
system('composer install'); // install dependencies
echo 'Dependencies installed';
system('php app/console assets:install web --symlink'); // install assets
echo 'Assets installed -- testing for presence';
if( !file_exists('blah.gif') ) { 
   echo 'assets not installed! error!';
}

答案 1 :(得分:1)

测试客户端实际上没有点击您的Web服务器,它直接通过您的应用程序模拟请求。

因此,它永远无法用于检查文件结构中是否存在资产。它可以用于动态加载的资产,但这不是这种情况,也不是通常的情况。

正如@Lusitanian建议的那样,您可以使用PHP提供的标准文件函数来检查它是否存在。

如果您需要帮助查找这些资产的路径,请查看Kernel::locateResource()方法:

$this->container->get('kernel')->locateResource('@AcmeDemoBundle/Resources/public/css/main.css');

如果找不到资源,这将抛出异常。