2016-04-30 46 views
1

我是新的phpunit測試,做了一個非常簡單的測試尋找狀態代碼。phpunit測試通過,在瀏覽器頁面加載失敗在Symfony 2

當我運行該測試通過:

bin\phpunit -c app src\AppBundle\Tests\Controller\StarLinX\TravelControllerTest.php 
PHPUnit 4.6.10 by Sebastian Bergmann and contributors. 
Configuration read from C:\PhpstormProjects\dir\app\phpunit.xml.dist 

. 

Time: 6.03 seconds, Memory: 20.00Mb 

OK (1 test, 1 assertion) 

但是當我加載頁面在瀏覽器中,拋出一個異常渲染,狀態碼樹枝文件500

我想,也許這是緩存問題,所以我清除了緩存--env = dev,prod和測試。

如何解決此錯誤?

這是我的測試文件:

namespace AppBundle\Tests\Controller\StarLinX; 
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 
class TravelControllerTest extends WebTestCase { 
    public function testGET() { 
    // Create a new client to browse the application 
    $client = static::createClient(); 

    // get the page 
    $crawler = $client->request('GET', '/travel/aaaaa'); 
    $this->assertEquals(200, $client->getResponse()->getStatusCode(), "Unexpected HTTP status code for GET /travel/aaaaa"); 

    } 
} 

這是在開發環境中運行時所引發的錯誤:

An exception has been thrown during the rendering of a template ("Notice: Array to string conversion") 

那麼一點點更多的分析後,我發現了錯誤大約在{{ weatherInfo }}這應該是{{ weatherInfo.now }}。這在運行開發環境時會引發錯誤。在生產中,樹枝只顯示Array

這是正常的行爲嗎?

回答

0

因爲它寫的你的測試只檢查錯誤狀態,所以測試不夠具體。如果顯示另一個頁面會怎麼樣?測試仍然會通過。


你應該爲了添加一些其他的測試,以確保頁面正確顯示:

// … 
$this->assertEquals(200, $client->getResponse()->getStatusCode(), 
    "Unexpected HTTP status code for GET /travel/aaaaa"); 

// Check that the page has a title. 
$this->assertSame(
    1, 
    $crawler->filter('title')->count() 
); 
// Check that the page has a correct title. 
$this->assertSame(
    'Travel', 
    $crawler->filter('title')->text() 
); 

// Check something in the content 
$this->assertSame(
    'Hello, World!', 
    $crawler->filter('body > div#content')->text() 
); 

如果你沒有足夠的信息來調試代碼,土特產品可以訪問到通常包含錯誤信息的頁面內容:

die($this->client->getResponse()->getContent()); 
+0

您添加的測試的唯一問題是,頁面仍然會通過。爲什麼twig在dev中爲數組拋出錯誤,但不在prod中? – ScottGutman

+0

@ScottGutman *您添加的測試唯一的問題是,頁面仍然會通過*如果出現錯誤,最後2個斷言應該失敗。 –

+0

@ScottGutman在prod中,Twig隱藏錯誤,因爲調試模式已啓用(最好隱藏異常而不是*破壞頁面)。但是你應該在日誌文件'app/logs/prod.log'中看到錯誤。 –

相關問題