是否可以从PHPUnit的代码覆盖中强制排除文件夹?
我遇到的问题是,我有一个Symfony 1.4项目,其中有文件夹./lib/vendor/symfony/*.我想排除内部的任何东西./lib/vendor/*- 递归.
现在,我想排除它们是否被我的测试隐含地覆盖,即我永远不想看到这些文件夹.所以,我已将此位添加到我的phpunit.xml配置文件中,但无论我做什么,它似乎都不会排除这些文件夹:
<filter>
<whitelist>
<exclude>
<directory>./lib/vendor/*</directory>
<directory>./lib/vendor/symfony/lib/*</directory>
</exclude>
</whitelist>
</filter>
Run Code Online (Sandbox Code Playgroud)
在我看来,当代码被点击并且XDebug注意到它,PHPUnit将把它包含在代码覆盖中,无论如何.这方面的缺点是,这段代码已经由Symfony开发人员测试过,所以不需要将它包含在我的报告中,弄乱了我的数字:P
我一直试图覆盖form_row Twig扩展,以便我可以呈现Twitter Bootstrap样式行.twitter boostrap表格行应该如下所示:
<div class="control-group">
<label class="control-label" for="idOfMainInput">Label Name:</label>
<div class="controls">
<input type="text" id="idOfMainInput" name="someDumbName">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
基本树枝div样式form_row块在此链接中定义如下:
{% block form_row %}
{% spaceless %}
<div>
{{ form_label(form) }}
{{ form_errors(form) }}
{{ form_widget(form) }}
</div>
{% endspaceless %}
{% endblock form_row %}
Run Code Online (Sandbox Code Playgroud)
所以,我的想法只是将必要的div放入,并在必要时硬编码类条目(即在主div中),但将'attr'值传递给form_label,form_errors和form_widget部分.我现在已经取出了form_errors,所以我没有深入了解它.这是我试过的:
{% form_theme form _self %}
{% block form_row %}
{% spaceless %}
<div class="control-group">
{{ form_label(form, 'test label name', { 'attr': {'class': 'control-label'} }) }}
<div class="controls">
{{ form_widget(form) }}
{{ form_errors(form) }} …Run Code Online (Sandbox Code Playgroud) 我们目前正在使用我们系统的Symfony 1.4实现.该系统太大,无法在Symfony 2中进行重新开发,也无法进行过夜切换 - 重新开发可能需要一年时间.我们正在考虑做的是安装一个新的Symfony 2项目,除了一个任务外,它是空白的 - 传递!
想法是你的浏览器要求example.com/products ... Symfony 2安装认识到它必须实际询问旧系统,它确实卷曲或类似的东西去问Symfony 1.4上的旧服务器相同问题,让我们说old.example.com/products ...服务器响应(标题,cookie等)由Symfony 2服务器解析并传递回浏览器.然后,浏览器并不是他实际上与"代理"交谈的明智之举.
然后我们在Symfony 2中重新开发名为"products"的模块,当我们推出时,我们只是为该模块切换代理"off".通过这种方式,我们坚持迭代开发,并且我们在开发团队(以及关于业务的过程)上使影响和学习曲线更好.
我在apache中考虑过mod_proxy,我想过要安装一个不同的代理服务器,但上面的解决方案最适合我们.
问题是,我知道Fabio已经这样做了,我认为这是vimeo.com(或其他一些视频网站),但我找不到任何关于如何实现这一目标的文档或教程,以及我应该集中精力研究的地方.
我有一个这样的基本代码集(在控制器内):
$sql = 'select * from someLargeTable limit 1000';
$em = $this->getDoctrine()->getManager();
$conn = $em->getConnection();
$statement = $conn->prepare($sql);
$statement->execute();
Run Code Online (Sandbox Code Playgroud)
我的困难在于,当结果集只有几条记录时,内存使用情况并没有那么糟糕.我在运行$ statement-> execute()之前和之后回显了一些调试信息.部分代码,并为我的实现找到了我有以下内容:
pre-execute... rowCount :: 0 memory: 49.614 MB
post-execute... rowCount :: 1000 memory: 50.917 MB
Run Code Online (Sandbox Code Playgroud)
将其从1000条记录中移动到10k时,MB使用率的差异将增加到13 MB
pre-execute... rowCount :: 0 memory: 49.614 MB
post-execute... rowCount :: 10000 memory: 62.521 MB
Run Code Online (Sandbox Code Playgroud)
最终,检索大约50k记录,我接近我的最大内存分配:
pre-execute... rowCount :: 0 memory: 49.614 MB
post-execute... rowCount :: 50000 memory: 114.096 MB
Run Code Online (Sandbox Code Playgroud)
通过这种实现,我无法编写一个允许我检索数据CSV的控制器(甚至命令).当然,50k +条目听起来很多,问题就是为什么,但这不是问题.
我的最终问题是:在执行时,是否可以告诉DBAL/Connection或DBAL/Statement缓冲SQL内部的数据而不是整个PHP中的数据.例如,如果我有1000万行,只发送第一个说10k行到PHP ...让我通过@ statement-> fetch(); 当光标到达10k的末尾时,截断数组并从数据库中获取下一个10k?
假设我有两个表,"users"和"audit",每次用户的状态发生变化时,触发器都会填充审计表.我正在尝试从两个表中进行选择,并获得具有关联的最新审计条目的用户条目(唯一).假设表格包含以下字段:
用户:
审计:
因此,对于每个用户条目,有多个审计条目.
所以,最终我需要说结果(斜体部分是审计结果,非斜体是mysql结果集中行的用户部分):
1,john,john @ gmail.com ,10,5,1,10,2012-08-10-10:15:59
等
现在,我能看到的唯一方法是做复合选择,我做的事情如下:SELECT U.*,(SELECT*FROM audit A2其中A2.id = max(A.id))FROM users U left join audit A on(U.id = A.user_id);
问题是,如果你在用户中有数千甚至数十万个结果,你将在数据库内部进行n + 1个查询 - 这实在是效率低下.
关于如何在不使用复合SELECTS的情况下将其编写为一个SQL语句的任何想法?
symfony ×3
symfony-1.4 ×2
symfony1 ×2
database ×1
dbal ×1
doctrine-orm ×1
large-data ×1
mysql ×1
pdo ×1
phpunit ×1
proxy ×1
sql ×1
twig ×1