草庐IT

phpunit 和 symfony2 : how to assert number of queries from client or response?

coder 2024-04-16 原文

我正在使用 symfony2 和 phpunit 进行测试。

有没有类似的东西:

$client->getResponse()->getNumberOfQueries()

如果不是类似的东西,从响应中检索查询数量的方法是什么?

我想快速检查一下我没有优化查询的地方。

编辑:我的变量 $profile 似乎总是 null

/**
 * @dataProvider urlProvider
 * @param $url
 */
public function testPageIsSuccessful($url)
{
    $client = self::createClient(array(), array(
            'PHP_AUTH_USER' => 'xx',
            'PHP_AUTH_PW'   => 'xx',
        ));
    $client->enableProfiler();
    $client->followRedirects();
    $client->request('GET', $url);

    $this->assertEquals(200, $client->getResponse()->getStatusCode());
    if ($profile = $client->getProfile())
    {
        $this->assertLessThan(10, $profile->getCollector('db')->getQueryCount());
    }
}

在 lmy config_dev.yml 中:

web_profiler:
    toolbar: true
    intercept_redirects: false

仍然得到:

Fatal error: Call to a member function getCollector() on a non-object in D:\Divers\Programmation\Web\xxx\src\AppBundle\Tests\Controller\ApplicationAvailabilityFunctionalTest.php on line 59

最佳答案

在功能测试中,您可以访问分析器,并获取在请求期间进行的查询数量:

class HelloControllerTest extends WebTestCase
{
    public function testIndex()
    {
        $client = static::createClient();
        $client->enableProfiler();

        $crawler = $client->request('GET', '/hello/Fabien');

        $this->assertLessThan(30, $profile->getCollector('db')->getQueryCount());
    }
}

确保分析器配置为在您的测试环境中收集分析数据:

# app/config/config_test.yml

# ...
framework:
    profiler:
        enabled: true
        collect: true

从“How to Use the Profiler in a Functional Test”食谱中了解更多信息。

关于phpunit 和 symfony2 : how to assert number of queries from client or response?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29700859/

有关phpunit 和 symfony2 : how to assert number of queries from client or response?的更多相关文章

  1. ruby - 通过 node-sass 的 Symfony assetic sass 过滤器? - 2

    我在让asseticsass过滤器与node-sass而不是ruby​​替代品一起工作时遇到了一些困难。我的config.yml文件中有以下配置:assetic:debug:"%kernel.debug%"use_controller:falsebundles:[]write-to:"%kernel.root_dir%/../web/assets"read_from:"%kernel.root_dir%/../web/assets"node:"%%PROGRAMFILES%%\nodejs\\node.exe"node_paths:["%%USERPROFILE%%\\AppData\

  2. javascript - Symfony 和 React 路由器,找不到路由 - 2

    我正在使用Symfony3,我正在使用React.js创建一个包,并使用自身的react-router。问题是当我在react中使用路由时,如果我重新加载页面,symfony路由模块会发送“找不到路由”我的路由是索引页面的/admin和下一页的/admin/data。当我加载页面/admin时一切正常,我单击链接转到/admin/data,一切正常,react动态发送给我,但现在当我刷新(F5)页面/admin/数据,Symfony拦截它并尝试在其代码中找到路由并重定向到/404“NoRouteFound”。我知道在AngularJs上,框架使用的是ancors路径“localhost

  3. javascript - 哪个 javascript MVC 框架更适合 Symfony 2? - 2

    提到了很多好的here但我想知道哪一个更适合Symfony2。 最佳答案 Symfony是一个服务器端MVC框架,它解决了许多Backbone.js等人感兴趣的相同领域问题。从这个意义上说,没有任何基于Javascript的MVC框架真正与Symfony集成得更好或更差。从MVC的Angular来看,最好侧重于服务器端(PHP/Symfony)或客户端(Javascript/各种)解决方案,并使用另一个来增强/支持该解决方案。尽管您当然可以将两者结合起来,但我认为如果您刚开始,最好将时间花在利用一个MVC框架上,而不是同时兼顾两个。

  4. javascript - 将变量从 Symfony2 PHP 文件发送到 js 文件 - 2

    我真的是JavaScript的新手,我无法找到关于这方面的一些教程。如果有,请告诉我阅读它们。我想做的是将变量从我的PHPController传递到.js文件-我想填充Highcharts变量。我知道我可以发送响应,但我还需要加载一个模板。这是模板:...{%blockbody%}Months//ThisistheChart:{%blockjavascript%}{%endblock%}{%endblock%}.js文件名为month.js$(function(){$('#container').highcharts({chart:{type:'bar'},title:{text:'B

  5. javascript - symfony 2 等同于 symfony 1 中的 url_for() 函数 - 2

    在Symfony1中,我们可以访问模板页面中的操作,例如url_for('modulename/actionname')而无需在routing.yml中写入任何内容。这在Symfony2中怎么可能?也就是说,如果我必须在一个Twig中访问多个操作而无需在路由中指定。这在使用ajax时很有用。提前致谢 最佳答案 如果我正确理解您的问题,您是在询问如何通过传递模块名称和操作名称而不是路由名称来生成url。是对的吗?我认为这在Symfony2中是不可能的。如果你看一下Symfony\Component\Routing\Generator\

  6. javascript - 如何在客户端验证 Symfony 2 表单(javascript) - 2

    我是symfony2的新手,我正在尝试构建一个应该由服务器和导航器验证的标准表单。服务器端验证可以很好地处理@Assert\...之类的断言,但我找不到在客户端进行验证的方法。搜索后,我指出Symfony2没有javascript库来管理它..所以我的问题是:最简单的方法是什么?我知道可以使用客户端库,例如jQueryValidation插件或类似Regula的东西,但这意味着我必须复制我的验证规则.. 最佳答案 Symfony是一个PHP框架,即服务器端应用程序框架。它不提供客户端验证,除非您使用具有required属性和其他em

  7. javascript - Ajax 中的 Symfony2 表单验证 - 2

    在某些页面上,我在引导模式中使用表单。我使用Ajax提交表单,它在Controller中得到验证。大多数用户会正确填写表单,但如果验证失败,表单将重新呈现并发送回给用户。我一点也不喜欢这样,但我找不到更好的方法,因为我无法访问字段的验证错误。有人有更好的方法来实现以JSON发送回验证错误吗? 最佳答案 我自己创建了一个函数publicfunctiongetFormErrors(Form$form){$errors=$form->getErrors();foreach($form->all()as$child){foreach($ch

  8. javascript - Symfony 2 - Assetic JavaScript 压缩导致错误 - 2

    我正在尝试将Symfony2应用程序置于生产模式。除了压缩的单个JavaScript文件导致错误并使站点无法正确呈现之外,一切都运行良好。我通过浏览器上的调试控制台找到了这个:UncaughtTypeError:undefinedisnotafunctionUncaughtTypeError:Object[objectObject]hasnomethod'treeview'第一个错误是指jQuery插件TreeView是指jQuery的插件,它呈现树状目录结构。另一方面,它在开发模式下运行良好,因为它不进行压缩,它只是一个接一个地包含每个文件。有人可以帮我解决这个问题吗?

  9. javascript - 如何将 Backbone.js 与 Symfony 框架和/或 Apache Thrift 一起使用 - 2

    我最近安装了一个使用Symfony2框架和ApacheThrift的网络应用。现在我想让backbone在Symfony2框架中可用。我的问题是关于Backbone.sync。如何覆盖/使用Backbone.sync以便使用Symfony2框架和/或从网络应用程序中的服务器获取数据ApacheThrift?网络上有一些教程吗?我刚找到这个Symfony+Backbone.jsforhighlydynamicapps,但它并没有说明如何从服务器获取数据。 最佳答案 默认情况下,Backbone.js及其同步方法无需任何修改即可与RES

  10. javascript - 如何使用 Symfony2 将 JavaScript 文件包含到 twig 模板中 - 2

    我可以像这样轻松地将CSS文件包含到我的twig模板中:{%blockstylesheets%}{%endblock%}但是对于我的JavaScript文件{%blockjavascripts%}{%endblock%}该方法不起作用。我也尝试过使用assetics,但这也没有用。 最佳答案 我推荐Assetic方法。这并不简单,但它会给您带来巨大的好处。首先,将您的JS嵌入到这样的模板中:{%blockmy_javascripts%}{%javascripts'@FooBarBundle/Resources/public/js/f

随机推荐