Costruisco una validazione lato modello laravel 4 con l'evento creating
Modello:laravel 4 Modello Eventi non funzionano con 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;
});
}
}
Funziona bene ma non ho problemi con PHPUnit. I due seguenti prove sono esattamente gli stessi ma juste il primo passaggio:
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
}
}
Se provo a creare un utente due volte nello stesso test, funziona, ma è come se l'evento di legame è presente solo nel primo test della mia classe di test. echo "Hello";
viene stampato una sola volta, durante la prima esecuzione del test.
Semplifico il caso per la mia domanda ma è possibile vedere il problema: non riesco a testare più regole di convalida in diversi test di unità. Provo quasi tutto da ore, ma ora sono vicino a saltare fuori dalle finestre! Qualche idea ?
Leggi https://github.com/laravel/framework/issues/1181 – crynobone
Grazie. Infine, gli eventi modello non sono facilmente testabili. Risolvo il mio problema con quel trucco: chiamo 'User :: boot()' nel mio metodo 'setUp()'. –
Preferisco usare 'User :: observ (new UserObserver)', in questo modo puoi testare 'UserObserver' da solo. – crynobone