php - Laravel 5.0 用户 Eloquent 模型 mock

标签 php laravel testing phpunit mockery

我尝试在 Laravel 应用程序的 Controller 测试中使用 Mockery 一段时间了,但似乎没有效果。

用户 Controller .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() 函数时,它在 View 中的“getIterator”函数上再次失败。

那我做错了什么? 我在这里观看了教程、阅读文章和相关答案,但尚未找到解决方案。

最佳答案

您必须模拟分页,并且它必须返回用户数组。

你的期望应该是这样的:

$this->user
    ->shouldReceive('orderBy->paginate')
    ->once()
    ->andReturn($userArray);

其中 $userArray 是一个数组,其中包含您将在 View 中使用的表单上的用户。我想这就是您收到“getIterator”错误的原因,可能您返回了无法正确迭代的内容。

关于php - Laravel 5.0 用户 Eloquent 模型 mock ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33056009/

相关文章:

php - 查询 Laravel 深夜营业时间

php - 为什么网络服务器会限制 ajax 查询 - DDoS?

php - 如何使用 php 和 mysql 使用纬度和经度进行几何搜索

javascript - 在 laravel 中链接外部 javascript 不起作用

php - .htaccess modrewrite 无法正常工作?

ruby - 如何在 RSpec 中运行单个测试/规范文件?

javascript - Protractor 通过绑定(bind)点击转发器中的特定元素

php - 如何在 PHP 中实现回调?

javascript - 将 HTML 和 JavaScript 数据发布到 php 文件

php - 图像未显示在 .blade 文件中