2014-12-22 48 views
0
$this->assertCount(1, $crawler->filter('meta[charset="utf-8"]')); 

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

所有這些都失敗了。我如何測試元標記?我需要檢查元關鍵字和描述的特定值。爬行器測試meta標記 - silex phpunit

+0

設置此值的位置?在響應的正文中還是在標題中? – Matteo

+0

響應的主體。 $ client-> request('GET','/');給我整個HTML文件,包括頭塊。 –

+0

檢查html是否有效(所有標記都關閉...),否則抓取程序找不到任何東西(嘗試測試是否存在簡單表達式) – Matteo

回答

0

我來到這裏的原因,我與我的網頁表單的元素同樣的問題:什麼是由$履帶

轉身過濾把這個問題是在我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; 


所以,在網/ 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"]')); 
    } 
} 


我敢肯定這是不是做的最好的方式,但它是唯一一個我想通了。