Laravel 5.0 用户 Eloquent 模型嘲讽
Posted
技术标签:
【中文标题】Laravel 5.0 用户 Eloquent 模型嘲讽【英文标题】:Laravel 5.0 User Eloquent Model Mockery 【发布时间】:2016-01-08 10:47:34 【问题描述】:一段时间以来,我一直在尝试在 Laravel 应用程序的 Controller 测试中使用 Mockery,但似乎没有任何效果。
用户控制器.php:
class UserController extends Controller
protected $user;
public function __construct(User $user)
$this->user = $user;
/**
* Display a listing of the resource.
* GET /user
*
* @return Response
*/
public function index()
$users = $this->user->orderBy('created_at', 'desc')->paginate(6);
return view('users.index', compact('users'));
我的测试:
class UserControllerTest extends TestCase
protected $user;
protected $builder;
protected $paginator;
public function setUp()
parent::setUp();
public function tearDown()
Mockery::close();
/**
* A basic functional test example.
*
* @return void
*/
public function testIndex()
$this->user = Mockery::mock('App\User');
$this->user
->shouldReceive('orderBy')
->once()
;
$this->app->instance('App\User', $this->user);
$response = $this->call('GET', 'users');
$this->assertEquals(200, $response->getStatusCode());
当我运行 PHPUnit 时,我得到了输出:
[Symfony\Component\Debug\Exception\FatalErrorException] 在非对象上调用成员函数 paginate()
当我添加 ->andReturn($this->user) 时:
$this->user
->shouldReceive('orderBy')
->once()
->andReturn($this->user)
;
我得到 PHPUnit 的输出:
Failed asserting that 500 matches expected 200.
Expected :200
Actual :500
当我打印响应时,其中包含以下错误:
Method Mockery_0_App_User::paginate() does not exist on this mock object
当我模拟 paginate() 函数时,它在视图中的“getIterator”函数上再次失败。
那我做错了什么? 我在这里观看了教程,阅读了文章和相关答案,但尚未找到解决方案。
【问题讨论】:
【参考方案1】:您必须模拟分页,并且它必须返回一组用户。
你的期望应该是这样的:
$this->user
->shouldReceive('orderBy->paginate')
->once()
->andReturn($userArray);
其中$userArray
是一个数组,用户在表单上,您将在视图中使用它。我想这就是你得到“getIterator”错误的原因,可能你返回了一些无法正确迭代的东西。
【讨论】:
Paginate有点嘲讽的态度啊!以上是关于Laravel 5.0 用户 Eloquent 模型嘲讽的主要内容,如果未能解决你的问题,请参考以下文章
Php 变量未传递到 whereHas 函数 - Laravel Eloquent
Laravel - Eloquent:使用用户发布表从用户那里获取帖子
Laravel 4.2 Eloquent 获取特定用户和特定角色