meta标签的爬虫测试 - silex phpunit

时间:2014-12-22 10:12:14

标签: phpunit silex

$this->assertCount(1, $crawler->filter('meta[charset="utf-8"]'));

$this->assertCount(1, $crawler->filter('html:contains("meta[charset="utf-8"]")'));

这一切都失败了。我如何测试元标记?我需要检查特定值的元关键字和描述。

1 个答案:

答案 0 :(得分:0)

我来到这里是因为我的页面中的表单元素遇到了同样的问题:$ crawler没有过滤任何内容

转向问题是我的 app.php 中的返回,当我最终正确地改变它所有的测试工作正常。 我将这里复制我的工作代码(假设我的 view.php 是一个带有基本html代码的php文件)

<?php

use Symfony\Component\HttpFoundation\Response;

require_once __DIR__ . '/path/to/autoload.php';

$app = new Silex\Application();

$app->get('/', function() {

    ob_start();
    require __DIR__ . '/path/to/view.php';
    $response = ob_get_contents();
    ob_end_clean();

    return new Response($response);
});

return $app;


所以,在 web / index.php 中,我必须要求 app.php 并运行它:

<?php

$app = require_once __DIR__ . '/../app/app.php';

$app->run();


最后,在我的功能测试中,我可以执行以下操作:

<?php

require __DIR__ . '/path/to/autoload.php';

use Silex\WebTestCase;

class SampleTests extends WebTestCase
{

    public function createApplication()
    {
       return require __DIR__ . '/path/to/app.php';
    }

    public function testSamplePage()
    {
        $client = static::createClient();

        $crawler = $client->request('GET', '/');
        $this->assertTrue($client->getResponse()->isSuccessful());
        $this->assertCount(1, $crawler->filter('meta[charset="utf-8"]'));
    }
}


我确信这不是最好的方法,但这是我唯一想到的。