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