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很陌生,所以可能有些事情我忘了做,或者我做錯了。
是否有任何形式的緩存正在完成?你的問題可能出現在$ editedLanguage-> getEnglishName()中,而不是代碼中的任何東西。你能直接從數據庫中獲取數據,而不是依賴於該函數來獲取它嗎? – Schleis
我試過使用一個簡單的教義查詢,但我得到了相同的結果。無論如何,第一次 - 當我使用這個對象時,我從數據庫中得到了一個新的對象。它似乎認爲舊的價值仍然存在,即使它被刷新到數據庫。有沒有什麼辦法可以輸出當前的值而不需要實際的斷言? – blainarmstrong
這裏有啥子我想:'$查詢= $這個 - > EM->的createQuery( 'SELECT t.englishName由\實體\ PsnTypes牛逼 \t \t \t WHERE t.id =:ID') \t \t \t - >的setParameter ('id',$ id);'我通過$ this-> assertEquals()運行了查詢的結果,但結果是一樣的。我應該關閉緩存嗎?如果是,我該怎麼做? – blainarmstrong