2

在 Laravel 4.2 中使用控制器的 Mockery (dev-master) 进行 PHPUnit 测试时收到以下错误:

致命错误:在第 129 行的 \laravel\vendor\mockery\mockery\library\Mockery.php 中的非对象上调用成员函数 fetchMock()

控制器和测试如下:

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 失败时在调试器中可见的值:

在此处输入图像描述

是什么导致了这个错误?

4

1 回答 1

4

使用此替换__construct方法并重试:

public function setUp() {
    parent::setUp();
    $this->mock = Mockery::mock('Eloquent', 'User');
}
于 2014-06-11T20:24:42.650 回答