1

CakePHPで、私は2つのモデルを作成しました。1つは請求書で、もう1つは製品です。製品との請求書「hasMany」の関連付け。請求書には、「validateCreateInvoice」や「validateUpdateInvoice」などの検証セットがいくつかあります。

検証セットを単体テストするために、以下のようなPHPUnitテストケースを作成しています。では、1)検証セットを動的に設定する方法は?2)PHPUnitからモデルと関連モデルを検証しますか?

次のコードを実行しました。マーチャントの電子メールと製品名のデータ検証は失敗するはずです。そうではありません。エラーダンプはnullです。何が問題なのか?注:検証ルールは、モデルの保存方法を通じて完全に機能しています。つまり、検証ルールに問題はありません。

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

    }
}
4

1 に答える 1

0

ベーカリーのコア以外の複数の検証動作を使用しているようで、テストスイートは動作を尊重していないようです

標準検証の標準の「on」属性を優先して、複数の検証動作を捨てます: http://book.cakephp.org/2.0/en/models/data-validation.html#on

于 2013-02-05T08:50:52.787 に答える