如何在Cakephp中模拟验证提供程序

时间:2019-04-29 11:12:53

标签: cakephp cakephp-3.0

我有一个验证器,用于检查增值税号是否正确。为此,它调用外部服务。此外部调用会使测试变慢并且不可靠,因此我想对其进行模拟,但我不知道该怎么做。

public function validationDefault(Validator $validator)
{
    $validator->setProvider('vat', 'App\Model\Validation\VatValidation');
    $validator->add('vat_no', 'isValidVatNo', [
        'rule' => 'validVatNumber',
        'provider' => 'vat',
    ]);
}

这是验证提供者:

<?php
namespace App\Model\Validation;
use Cake\Core\Configure;
use Cake\Validation\Validation;
use VatNumberCheck\Utility\Model\VatNumberCheck;

class VatValidation extends Validation
{
    public static function validVatNumber($check)
    {
        $vatNumberCheck = new VatNumberCheck();
        try {
            return $vatNumberCheck->check($check);
        } catch (InternalErrorException $e) {
            return false;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

public function testValidationFail() {
    $VatValidator = $this->getMockBuilder('Cake\Validation\Validator')
        ->setMethods(['validVatNumber'])
        ->getMock();
    $VatValidator->expects($this->any())
        ->method('validVatNumber')
        ->will($this->returnValue(false));
    $this->Users->getValidator()->setProvider('vat', $VatValidator);

    $user = $this->Users->newEntity([
        'vat_no' => 'asdf',
    ]);
    $errors = $user->errors();
    $this->assertArrayHasKey('vat_no', $errors);
}