Ошибка при тестировании контроллера Laravel с насмешкой: вызов функции-члена fetchMock() для не-объекта

Я получаю следующую ошибку при выполнении теста PHPUnit с помощью Mockery (dev-master) контроллера в Laravel 4.2:

Неустранимая ошибка: вызов функции-члена fetchMock() для не-объекта в \laravel\vendor\mockery\mockery\library\Mockery.php в строке 129

Контроллер и тест выглядят следующим образом:

class UserControllerTest extends TestCase {
  public function __construct() {
    $this->mock = Mockery::mock('Eloquent', 'User');
  }
  function tearDown() {
    Mockery::close();
  }
  public function testIndex() {
    $this->mock
      ->shouldReceive('all')
      ->once()
      ->andReturn('foo');
    $this->app->instance('User', $this->mock);
    $response = $this->action('GET', 'UserController@index');
    //other stuff
  }
}

class UserController extends \BaseController {
  protected $user;
  public function __construct(User $user) {
    $this->user = $user;
  }
  public function index() {
    $users = $this->user->all();
    return View::make('users.index', ['users' => $users]);
  }
  //other stuff
}

Этот тест работает нормально без Mockery (т.е. без выполнения $this->app->instance('User', $this->mock); )

Ошибка возникает внутри функции fetchMock при выполнении return self::$_container->fetchMock($name);

Вот значения, видимые в отладчике внутри fetchMock при сбое:

введите здесь описание изображения

Что вызывает эту ошибку?


person camcam    schedule 11.06.2014    source источник


Ответы (1)


Замените метод __construct этим и повторите попытку:

public function setUp() {
    parent::setUp();
    $this->mock = Mockery::mock('Eloquent', 'User');
}
person The Alpha    schedule 11.06.2014