工作,我建立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