Php Laravel 5.0用户口才模型模拟
一段时间以来,我一直试图在我的Laravel应用程序的控制器测试中使用mockry,但似乎没有任何效果 UserController.php:Php Laravel 5.0用户口才模型模拟,php,laravel,testing,phpunit,mockery,Php,Laravel,Testing,Phpunit,Mockery,一段时间以来,我一直试图在我的Laravel应用程序的控制器测试中使用mockry,但似乎没有任何效果 UserController.php: class UserController extends Controller { protected $user; public function __construct(User $user) { $this->user = $user; } /** * Display a
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)时: 我得到的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”函数上再次失败
那么我做错了什么?
我在这里看了教程,阅读了文章和相关答案,但还没有找到解决方案 您必须模拟分页,并且它必须返回一个用户数组 您的期望应该如下所示:
$this->user
->shouldReceive('orderBy->paginate')
->once()
->andReturn($userArray);
其中,
$userArray
是一个数组,其中的用户位于您将在视图中使用它的表单上。我想这就是为什么会出现“getIterator”错误,可能是因为返回了无法正确迭代的内容。Paginate对嘲弄持某种态度,哈!
$this->user
->shouldReceive('orderBy->paginate')
->once()
->andReturn($userArray);