7

creatingModel Eventを使用して、Laravel 4 でモデル側の検証を作成します。

class User extends Eloquent {

    public function isValid()
    {
        return Validator::make($this->toArray(), array('name' => 'required'))->passes();
    }

    public static function boot()
    {
        parent::boot();

        static::creating(function($user)
        {
            echo "Hello";
            if (!$user->isValid()) return false;
        });
    }
}

うまく動作しますが、PHPUnit に問題があります。次の 2 つのテストはまったく同じですが、最初の 1 つのパスのみを使用します。

class UserTest extends TestCase {

    public function testSaveUserWithoutName()
    {
        $count = User::all()->count();

        $user = new User;
        $saving = $user->save();

        assertFalse($saving);                       // pass
        assertEquals($count, User::all()->count()); // pass
    }

    public function testSaveUserWithoutNameBis()
    {
        $count = User::all()->count();

        $user = new User;
        $saving = $user->save();

        assertFalse($saving);                       // fail
        assertEquals($count, User::all()->count()); // fail, the user is created
    }
}

同じテストでユーザーを 2 回作成しようとすると機能しますが、バインド イベントがテスト クラスの最初のテストにのみ存在する場合と似ています。はecho "Hello";、最初のテスト実行中に 1 回だけ出力されます。

私の質問のケースを単純化しますが、問題を見ることができます。異なる単体テストで複数の検証ルールをテストすることはできません。私は何時間も前からほとんどすべてを試していますが、今すぐ窓から飛び出そうとしています! 何か案が ?

4

2 に答える 2