2013-07-06 27 views
0

我有用於向我的數據庫添加語言的控制器。早先在控制器的測試類中,添加新語言的測試添加了一種稱爲「測試語言」的新語言。我也有一個編輯操作的測試,用下面的代碼:即使一切都很好,PHPUnit測試顯示失敗

public function testCanEditLanguageAction() 
    { 
     $language = $this->em->getRepository('\Entities\Languages') 
      ->findOneByEnglishName($this->testLanguage); 
     $languageId = $language->getId(); 
     unset($language); 

     $replacementName = 'Esttay Anguagelay'; 

     // get the form in order to get the hash 
     $form = new Application_Model_FormLanguage([ 
      'action' => '/langauges/edit', 
      'id' => $languageId 
     ]); 

     $this->dispatch("/languages/edit/$languageId"); 
     $form->render(); 

     $this->request 
      ->setMethod('POST') 
      ->setPost([ 
       'id' => $languageId, 
       'englishName' => $replacementName, 
       'japaneseName' => '仮の言葉', 
       'kanaName' => 'カリノコトバ', 
       'languageHash' => $form->languageHash->getValue() 
      ]); 

     $this->dispatch("/languages/edit"); 

     $this->assertRedirectTo('/'); 

     // make sure the data got edited properly 
     $editedLanguage = $this->em 
      ->getRepository('\Entities\Languages') 
      ->findOneById($languageId); 

     $this->assertEquals($replacementName, $editedLanguage->getEnglishName()); 
} 

測試工作正常大部分:它正確地獲得語言,編輯它,然後從「測試版」,以更新的價值「Esttay Anguagelay」。如果在測試完成後查看數據庫,測試語言甚至具有該值。

問題是,根據PHPUnit,測試失敗。我得到以下輸出:

There was 1 failure: 

1) LanguagesControllerTest::testCanEditLanguageAction 
Failed asserting that two strings are equal. 
--- Expected 
+++ Actual 
@@ @@ 
-Esttay Anguagelay 
+Test Language 

換句話說,它認爲,的langauge的價值並沒有改變,當它顯然有。 (就像我說的那樣,檢查數據庫的值確認它實際上已經改變了)。我在這裏錯過了什麼嗎?我對PHPUnit很陌生,所以可能有些事情我忘了做,或者我做錯了。

+0

是否有任何形式的緩存正在完成?你的問題可能出現在$ editedLanguage-> getEnglishName()中,而不是代碼中的任何東西。你能直接從數據庫中獲取數據,而不是依賴於該函數來獲取它嗎? – Schleis

+0

我試過使用一個簡單的教義查詢,但我得到了相同的結果。無論如何,第一次 - 當我使用這個對象時,我從數據庫中得到了一個新的對象。它似乎認爲舊的價值仍然存在,即使它被刷新到數據庫。有沒有什麼辦法可以輸出當前的值而不需要實際的斷言? – blainarmstrong

+0

這裏有啥子我想:'$查詢= $這個 - > EM->的createQuery( 'SELECT t.englishName由\實體\ PsnTypes牛逼 \t \t \t WHERE t.id =:ID') \t \t \t - >的setParameter ('id',$ id);'我通過$ this-> assertEquals()運行了查詢的結果,但結果是一樣的。我應該關閉緩存嗎?如果是,我該怎麼做? – blainarmstrong

回答

0

$ this-> assertEquals()會在字符串不相等時引發錯誤。如果你不熟悉它,這是一種顛倒的邏輯。因此,您可能需要測試更改後的語言是否與assertEquals匹配。

相關問題