zbudować walidację modelu boku w laravel 4 z creating
modelu zdarzeń:laravel 4 model wydarzenia nie działają z 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;
});
}
}
To działa dobrze, ale mam problemy z PHPUnit. Dwa kolejne testy są dokładnie takie same, ale juste pierwszy pass:
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
}
}
Gdy próbuję utworzyć użytkownika dwa razy w tym samym teście, to działa, ale to jest jak gdyby zdarzenie wiązania występuje tylko w pierwszy test mojej klasy testowej. echo "Hello";
jest drukowany tylko jeden raz, podczas pierwszego wykonania testu.
Uproszczę sprawę dla mojego pytania, ale widać problem: nie mogę przetestować kilku reguł sprawdzania poprawności w różnych testach jednostkowych. Próbuję prawie wszystkiego od godzin, ale jestem już blisko, aby wyskoczyć przez okna! Dowolny pomysł ?
Czytaj https://github.com/laravel/framework/issues/1181 – crynobone
Dziękuję. Wreszcie zdarzenia modelowe nie są łatwe do sprawdzenia. Rozwiązuję swój problem z tą sztuczką: W mojej metodzie 'setUp()' nazywam 'User :: boot()'. –
Wolę używać 'User :: observe (new UserObserver)', w ten sposób możesz przetestować 'UserObserver' na swoim komputerze. – crynobone