【发布时间】:2015-03-12 12:31:07
【问题描述】:
我正在测试我的一个控制器,无论我尝试什么,我都会收到 all() 函数不存在的错误。
Static method Mockery_1_App_Models_User::all() does not exist on this mock object
我的测试方法:
/**
* Test index page
* @return void
*/
public function testIndexAsUser()
{
$this->beUser();
// The method calls the mock objects should receive
$this->user->shouldReceive('all')->once()->andReturn([]);
// Call index page
$response = $this->call('GET', 'users');
// Assertions
$this->assertResponseOk();
$this->assertViewHas('user');
$this->assertViewNameIs('users.show');
}
我的嘲讽方法:
/**
* Mock a class
* @param string $class
* @return Mockery
*/
public function mock($class)
{
$mock = Mockery::mock('Eloquent', $class);
app()->instance($class, $mock);
return $mock;
}
我的实际控制器方法:
/**
* Show all users
* @return Response
*/
public function getIndex()
{
$users = $this->user->all();
return view('users.index');
}
我在我的模拟对象中使用了错误的 Eloquent 类吗?从 Laravel 5 开始,模型不是指 Eloquent,而是指 Illuminate\Database\Eloquent\Model,但我也试过了。
【问题讨论】:
-
这很可能与 Laravel 5 尚未进入 Beta 版这一事实有关 - 并且 Laravel 5 的“测试”功能尚未完成。在 Taylor 完成对 L5 的所有测试支持之前,我不会花太多时间在上面
-
你试过
Mockery::mock('Model', $class)或Mockery::mock('App\Model', $class)吗? (我知道您说过您尝试过使用完整的命名空间 - 但您是否尝试过短版本?)