Come posso testare i miei modelli Eloquent quando sto usando l'ORM al di fuori di Laravel? Quello che spero di fare è eseguire test su ciascun modello, ma in qualche modo simulare l'oggetto database connection / query / builder (?).
Di seguito c'è qualcosa di simile a quello che sto cercando di fare:
$capsule = new Capsule;
$capsule->addConnection(array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'mydb',
'username' => 'dbuser',
'password' => 'badpass',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => ''
));
$capsule->bootEloquent();
Di seguito è riportato il mio modello:
<?php
use Illuminate\Database\Eloquent\Model as Eloquent;
class Users extends Eloquent
{
public function myCustomFind($id)
{
// .. lots of various checks before find() ...
return $this->find($id);
}
}
Poi, nei miei test unitari, posso fare quanto segue (non una versione funzionante, ma spero che tu possa vedere cosa spero di fare):
$mockSomething->expects($this->once)
->method('find')
->with(1);
$users = new Users();
$users->setSomething($mockSomething);
$user = $users->myCustomFind(1);
... Non ho idea di come farlo senza una completa integrazione (i dati vengono scritti nel database). Voglio solo testare i miei modelli, non l'ORM, inoltre i miei test sono veloci e solo il controllo dei parametri corretti vengono passati al generatore di query e il mio metodo gestisce correttamente i dati risultanti. Will Eloquent permettere questo? Ho notato che Laravel ha la sua classe di TestCase ma da quello che vedo si rivolge a tutti gli aspetti dei test in Laravel (controller, ecc.)
Se Eloquent non è una buona scelta per i test unitari al di fuori di Laravel, ci sono ORM popolari che possono? Non ho passato molto tempo con altri come Doctrine o Propel per sapere di cosa sono capaci in questo senso. Gradirei qualsiasi consiglio.