CakePHP:测试->;验证异常

CakePHP:测试->;验证异常,cakephp,testing,phpunit,Cakephp,Testing,Phpunit,我不熟悉编程和测试。我被困在这个测试中,它抛出了一个异常。 请帮助我,因为我真的不知道我应该如何处理这个问题 我的测试方法: public function saveNewInstitution($institutionData, $user) { $institutionData[$this->alias]['isActive'] = 1; $institutionData[$this->alias]['users_id'] = $user['User']['id'

我不熟悉编程和测试。我被困在这个测试中,它抛出了一个异常。 请帮助我,因为我真的不知道我应该如何处理这个问题

我的测试方法:

public function saveNewInstitution($institutionData, $user) {
    $institutionData[$this->alias]['isActive'] = 1;
    $institutionData[$this->alias]['users_id'] = $user['User']['id'];
    $this->create();
    $this->set($institutionData);
    if ($this->validates()) {
        return $this->save();
    } else {
        throw new ValidationException('Not all fields are filled out correct');
    }
}
我的testclass:

public function testSaveNewInstitution() {
    $result = array(
        'Institution' => array(
            'id' => 2,
            'name' => 'Spitex',
            'address' => 'Hauptweg 4',
            'postcode' => '1234',
            'city' => 'huuh',
            'phone_number' => '123 456 78 90',
            'email' => 'staufen@tsdy.huuh',
            'comment' => '',
            'isActive' => TRUE,
            'users_id' => 2,
            'institution_types_id' => 5
        ),
        'Users' => array(
            'id' => 2,
            'email' => 'herbert@xyz.ch',
            'password' => AuthComponent::password('12345678'),
            'isMale' => TRUE,
            'first_name' => 'Herbert',
            'last_name' => 'Müller',
            'address' => 'Hauptstrasse 1',
            'postcode' => '1234',
            'city' => 'Zürich',
            'phone_number' => '123 456 78 90',
            'isActive' => FALSE,
            'institutions_id' => 2,
            'groups_id' => 4
        ),
        'InstitutionTypes' => array(
            'id' => 5,
            'name' => 'Spitex'
        ),
        'Assignee' => array('0' => array(
                'id' => 2,
                'email' => 'herbert@xyz.ch',
                'password' => AuthComponent::password('12345678'),
                'isMale' => TRUE,
                'first_name' => 'Herbert',
                'last_name' => 'Müller',
                'address' => 'Hauptstrasse 1',
                'postcode' => '1234',
                'city' => 'Zürich',
                'phone_number' => '123 456 78 90',
                'isActive' => FALSE,
                'institutions_id' => 2,
                'groups_id' => 4
        ))
    );

    $expected = $this->Institution->saveNewInstitution($result, 2);
    $this->assertEqual($result, $expected);
}

public function testSaveNewInstitutionException() {
    $this->setExpectedException('ValidationException');
    $expected = array(
        'Institution' => array(
            'id' => 2,
            'name' => 'Spitex',
            'address' => 'Hauptweg 4',
            'postcode' => '1234',
            'city' => 'huuh',
            'phone_number' => '123 456 78 90',
            'email' => 'staufen@xyz.huuh',
            'comment' => '',
            'isActive' => TRUE,
            'users_id' => 2,
            'institution_types_id' => 5
        ),
        'Users' => array(
            'id' => 2,
            'email' => 'herbert@xyz.ch',
            'password' => AuthComponent::password('12345678'),
            'isMale' => TRUE,
            'first_name' => 'Herbert',
            'last_name' => 'Müller',
            'address' => 'Hauptstrasse 1',
            'postcode' => '1234',
            'city' => 'Zürich',
            'phone_number' => '123 456 78 90',
            'isActive' => FALSE,
            'institutions_id' => 2,
            'groups_id' => 4
        ),
        'InstitutionTypes' => array(
            'id' => 5,
            'name' => 'Spitex'
        ),
        'Assignee' => array('0' => array(
                'id' => 2,
                'email' => 'herbert@mueller.ch',
                'password' => AuthComponent::password('12345678'),
                'isMale' => TRUE,
                'first_name' => 'Herbert',
                'last_name' => 'Müller',
                'address' => 'Hauptstrasse 1',
                'postcode' => '1234',
                'city' => 'Zürich',
                'phone_number' => '123 456 78 90',
                'isActive' => FALSE,
                'institutions_id' => 2,
                'groups_id' => 4
        ))
    );
    $this->Institution->saveNewInstitution($expected, 2);
}
我的例外:

**VALIDATIONEXCEPTION**
Not all fields are filled out correct
Test case: InstitutionTest(testSaveNewInstitution)
Stack trace:
/app/Test/Case/Model/InstitutionTest.php : 148
InstitutionTest::testSaveNewInstitution
/usr/lib/php/PHPUnit/Framework/TestCase.php : 969
/usr/lib/php/PHPUnit/Framework/TestCase.php : 824
/usr/lib/php/PHPUnit/Framework/TestResult.php : 648
/usr/lib/php/PHPUnit/Framework/TestCase.php : 769
/lib/Cake/TestSuite/CakeTestCase.php : 78
/usr/lib/php/PHPUnit/Framework/TestSuite.php : 775
/usr/lib/php/PHPUnit/Framework/TestSuite.php : 745
/usr/lib/php/PHPUnit/TextUI/TestRunner.php : 346
/lib/Cake/TestSuite/CakeTestRunner.php : 57
/lib/Cake/TestSuite/CakeTestSuiteCommand.php : 111
/lib/Cake/TestSuite/CakeTestSuiteDispatcher.php : 242
/lib/Cake/TestSuite/CakeTestSuiteDispatcher.php : 99
/lib/Cake/TestSuite/CakeTestSuiteDispatcher.php : 116
/app/webroot/test.php : 92
9/9 test methods complete: 8 passes, 0 fails, 12 assertions and 1 exceptions.

正如评论中所说的,这个问题相当严峻。验证失败,因此抛出异常(如代码所需)

如果要调试它,请尝试确定

$this->validationErrors

在save()之后包含(在/而不是引发异常之前)。然后您就知道验证失败的原因了。

显然,您没有满足
机构
模型中设置的验证规则。此外,如果您在任何地方都没有捕获到异常,则在此处抛出异常可能是不明智的。如果所有验证错误都触发404 etc,用户很快就会对您非常生气,他们必须从头开始填写您的表单。@马克:这没问题,因为它在其他地方被发现了!