2017-01-07 32 views
3

SYSINFO:如何使用phpunit測試位於symfony web文件夾中的靜態文件?

  • PHPUnit的5.7.4
  • PHP 7.0.13
  • 的Symfony 3.2.1

我試圖遵循 「下載」 頁面上的鏈接和驗證文件是可下載的,但當我按照鏈接$client->click($crawlerDownload->link());我得到一個404。 symfony $client不可能訪問web目錄中的靜態文件嗎?我如何測試這個?

favicon測試是測試用例的簡化版本。

public function testPressDownload() 
{ 
    $client = static::createClient(); 
    $client->followRedirects(false); 

    //create fixture file 
    $kernelDir = $client->getKernel()->getRootDir(); 
    $file = "${kernelDir}/../web/download/example.zip"; 
    file_put_contents($file, "dummy content"); 


    $crawler = $client->request('GET', '/files'); 
    $this->assertEquals(200, $client->getResponse()->getStatusCode()); //ok 

    $crawlerDownload = $crawler 
     ->filter('a[title="example.zip"]') 
    ; 
    $this->assertEquals(1, $crawlerDownload->count()); //ok 


    $client->click($crawlerDownload->link()); 
    $this->assertEquals(200, $client->getResponse()->getStatusCode()); //fails 404 
} 


public function testFavicon() 
{  
    $crawler = $client->request('GET', '/favicon.ico'); 
    $this->assertEquals(200, $client->getResponse()->getStatusCode()); //fails 404 
} 
+0

你有沒有嘗試過:'$ crawler = $ client-> request('GET','favicon.ico');'沒有正斜槓? –

+0

是的也試過沒有斜槓'/'。相同的結果 - >'404' – c33s

回答

2

你不能,測試的Bootstrap的應用程序,它不是一個「真正的Web服務器」,所以請求/favicon.ico時,搜索對應於這條道路未找到該應用程序的路徑。

爲了驗證這一點,創建一個假的路線:

/** 
* @Route("/favicon.ico", name="fake_favicon_route") 
* 
* @return Response 
*/ 

你會看到,現在測試將通過。

+0

我懷疑這一點。問題是假的路由我無法測試,如果該文件是真的在正確的位置,我想防止404結果,如果上傳DIR配置是錯誤的。所以任務仍然是如何測試文件上傳? – c33s

+0

當然。您必須使用另一個功能測試框架,如sélénium。它不能用symfony直接完成。 – COil

相關問題