【问题标题】:How to set cakephp validation sets dynamically in PHPUnit如何在 PHPUnit 中动态设置 cakephp 验证集
【发布时间】:2012-07-14 14:05:40
【问题描述】:

在 CakePHP 中,我写了两个模型,一个是 Invoice,另一个是 Product。发票“hasMany”与产品关联。 Invoice 有几个验证集,例如“validateCreateInvoice”和“validateUpdateInvoice”等......

我正在编写如下所示的 PHPUnit 测试用例来对验证集进行单元测试。那么如何 1)动态设置验证集? 2) 从 PHPUnit 验证模型和相关模型?

我运行了以下代码,商家电子邮件和产品名称数据验证应该失败。但事实并非如此。错误转储为空。可能是什么问题呢 ? 注意:验证规则通过模型保存方法可以正常工作,这意味着验证规则没有问题。

App::import('Model', 'Invoice');
App::import('Model', 'Product');   

App::uses('Validation', 'Utility');
App::uses('CakeFixtureManager', 'TestSuite/Fixture');
App::uses('CakeTestFixture', 'TestSuite/Fixture');


require_once 'PHPUnit/Framework/TestCase.php';
require_once 'PHPUnit/Autoload.php';


 class InvoiceTest extends PHPUnit_Framework_TestCase  {


    public $sourceName = 'Invoice'; 


    public function setUp() {
        parent::setUp();
        $this->Invoice=& ClassRegistry::init('Invoice');
        $this->InvoiceValidation =& ClassRegistry::init('Validate');            
    }        


    public function tearDown() {
        parent::tearDown();
        unset($this->Model, $this->Source);
        ConnectionManager::drop($this->sourceName);
    } 


    public function testCreate() {      

        $data = array(              
                "merchantEmail" => "stest_1339339519_bizyahoo.com", // not a valid email address
                "payerEmail" => "stest_1340973819_per@yahoo.com",
                "currencyCode" => "USD",
                "paymentTerms" =>  "Net10",             
                "Products" =>array( 
                        0 => array ( 
                                "productName" => "", // product name shouldn't be empty
                                "description" => "From CocaCola",
                                "unitPrice" => 1.56,
                                "quantity" => 1,
                                "taxName" => "Tax1",
                                "taxRate" => 7

                              ),
                        1 => array (
                                "productName" => "Pepsi1",
                                "description" => "From Pepsi",
                                "unitPrice" => 1.65,
                                "quantity" => 1,
                                "taxName" => "Tax2",
                                "taxRate" => 7
                        ),
                    ),
                );  



        //Create Invoice
        $invoice=new Invoice();
        $invoice->set($data);
        $this->Invoice->setValidation('validateCreateInvoice');     
        $errors = $this->Invoice->validates($data); // validation should fails because of invalid merchant email address
            Debugger::dump($errors); // output is null
            $errors1 = $this->Invoice->validateAssociated($data);   // validation should fail because product name is empty         
            Debugger::dump($errors1); // output is null

    }
}

【问题讨论】:

    标签: validation cakephp phpunit


    【解决方案1】:

    您似乎使用了来自面包店的非核心多重验证行为,而测试套件似乎不尊重该行为

    我会放弃多重验证行为,转而支持 std 验证的标准“on”属性: http://book.cakephp.org/2.0/en/models/data-validation.html#on

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多