creating
Model 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 回だけ出力されます。
私の質問のケースを単純化しますが、問題を見ることができます。異なる単体テストで複数の検証ルールをテストすることはできません。私は何時間も前からほとんどすべてを試していますが、今すぐ窓から飛び出そうとしています! 何か案が ?