Я начинаю модульное тестирование в Laravel 4, и я застрял в тестировании пользовательского метода в модели, которую я добавил в стандартную модель пользователя.
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends BaseModel implements UserInterface, RemindableInterface {
/**
* Logs to the database and streams an update
* Uses logIt and streamIt on Base model
* @param String $action The action being performed
* @return void
*/
private function logAndStream($action)
{
$this->logIt('info', $action.'d user '.$this->username);
$this->streamIt($action.'d user '.$this->username);
}
Этот класс расширяет BaseModel, который, в свою очередь, расширяет Eloquent и определяет методы logIt и StreamIt следующим образом:
class BaseModel extends Eloquent {
/**
* Log an action to log file
* @return void
*/
protected function logIt($level, $msg) {
...
}
/**
* Log an action to activity stream
* @return void
*/
protected function streamIt($msg, $client = null, $project = null) {
...
}
Весь этот код отлично работает, когда я вручную тестирую вещи. Но теперь я хочу создать модульный тест для его автоматизации.
class UserTest extends TestCase {
public function testLogAndStream()
{
$base = Mockery::mock('BaseModel')->shouldAllowMockingProtectedMethods();
$base->shouldReceive('logIt')
->with('info', 'Created user Tester')
->once();
$user = new User;
$user->username = 'Tester';
$user->logAndStream('Create');
}
Когда я пытаюсь запустить это, я получаю ошибку, жалуясь на то, что не нашел logAndStream.
1) UserTest::testLogAndStream
BadMethodCallException: Call to undefined method Illuminate\Database\Query\Builder::logAndStream()
Что мне не хватает?