工作,我建立Laravel 4的模型端验证与creating
型号事件:Laravel 4模型事件不使用PHPUnit
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的问题。以下两个测试是完全一样的,但探微第一个通:
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
}
}
如果我尝试在同一个测试两次创建一个用户,它的工作原理,但它就像如果结合事件仅在存在我的测试班的第一次测试。在第一次测试执行期间,echo "Hello";
仅打印一次。
我简化了我的问题,但你可以看到问题:我不能在不同的单元测试中测试几个验证规则。几小时后我几乎尝试了所有的事情,但我快要跳出窗户了!任何想法 ?
读https://github.com/laravel/framework/issues/1181 – crynobone
谢谢。最后,模型事件不容易测试。我用这个技巧解决了我的问题:我在我的'setUp()'方法中调用'User :: boot()'。 –
我更喜欢使用'User :: observe(new UserObserver)',这样你就可以自己测试'UserObserver'。 – crynobone