我有一个控制器,用于向我的数据库添加语言。在控制器测试类的早期,添加新语言的测试添加了一种名为“测试语言”的新语言。我还对编辑操作进行了测试,使用以下代码:
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
换句话说,它认为语言的价值没有改变,当它显然有。 (就像我说的,检查数据库的值确认它实际上已经改变了)。我在这里错过了什么吗?我对PHPUnit很新,所以我可能会忘记做错或做错了。
答案 0 :(得分:0)
当字符串不相等时,$ this-> assertEquals()将抛出错误。如果你不熟悉它,它就是一种颠倒的逻辑。因此,您可能希望测试更改的语言是否与assertEquals匹配。