Ошибка при тестировании контроллера 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
}

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

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

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

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

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

1 ответ

Решение

Замещать __construct метод с помощью этого и попробуйте снова:

public function setUp() {
    parent::setUp();
    $this->mock = Mockery::mock('Eloquent', 'User');
}
Другие вопросы по тегам