繁体   English   中英

如何将Auth添加为控制器依赖项以在Laravel 4中进行测试

[英]How to add Auth as a controller dependency for testing in Laravel 4

我从Laravel 4中的一些TDD开始。虽然我了解依赖项注入的基础知识,但我似乎无法理解如何模拟Auth功能。 以下是我当前的用户控制器,仅包含index方法及其适用的测试。 当我运行phpunit时,当前设置会不断抛出错误,即Auth的“未定义索引”错误。 有更好的方法吗?

我的控制器:

class UserController extends \BaseController {

    /**
     * User instance
     * 
     * @var User
     */
    protected $user;

    /**
     * The master layout that View's will be built upon.
     * 
     * @var string
     */
    protected $layout = 'layout.user-master';

    /**
     * Constructor
     * 
     * @param User $user
     * @param View $view
     */
    public function __construct(User $user) 
    {
        $this->user = $user;

        // Filters
        $this->beforeFilter('csrf', array('on' => 'post'));
        $this->beforeFilter('auth', array('except' => array('create', 'store')));
    }

    /**
     * Display a listing of the user.
     *
     * @return Response
     */
    public function index()
    {
        $id = Auth::user()->id;

        $user = $this->user->find($id);

        $this->layout->content = View::make('user.index', compact('user'));
    }
}

用户控制器测试

<?php

use \Mockery;

class UserControllerTest extends TestCase {

    public function __construct()
    {
        // Mock an Eloquent User Model instance
        $this->mock = Mockery::mock('Eloquent', 'User');    
    }

    public function tearDown()
    {
        Mockery::close();
    }

    public function testIndex()
    {
        Auth::shouldReceive('user')->once()->andReturn(Mockery::any());

        $this->mock
                ->shouldReceive('find')
                ->once()
                ->with(Mockery::any())
                ->andReturn('foo');

        $this->app->instance('User', $this->mock);

        $this->call('GET', 'user');

        $this->assertViewHas('user');
    }

}

我已经找到解决此问题的方法。

我要做的就是在测试中调用be()方法来设置当前登录的用户。

$this->be(User::find(1));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM