0

データベースに言語を追加するためのコントローラーがあります。コントローラーのテストクラスの前半で、新しい言語を追加するためのテストは、「テスト言語」と呼ばれる新しい言語を追加します。次のコードを使用して、編集アクションのテストもあります。

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());
}

テストはほとんどの部分で問題なく動作します。言語を正しく取得して編集し、値を「Test Language」から「Esttay Anguagelay」に更新します。テストが完了した後にデータベースを調べると、テスト言語にもその値が含まれています。

問題は、PHPUnit によると、テストが失敗することです。次の出力が得られます。

There was 1 failure:

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

つまり、言語の価値が明らかに変化している場合、言語の価値は変化していないと考えます。(私が言ったように、データベースの値をチェックすると、実際に変更されていることが確認されます)。ここで何か不足していますか?私は PHPUnit にまったく慣れていないので、何かを忘れていたり、間違っていたりする可能性があります。

4

1 に答える 1

0

$this->assertEquals() は、文字列が等しくない場合にエラーをスローします。あなたがそれに慣れていない場合、それは一種の逆の論理です。したがって、変更された言語が assertEquals と一致することをテストする必要があります。

于 2013-07-08T14:02:27.243 に答える