Laravel 4:为什么我对Auth的部分嘲笑失败了?

时间:2014-04-29 15:43:44

标签: laravel-4 mocking partial

我在控制器中进行一些单元测试,在我的网络应用中处理一些身份验证。我正在测试有效登录时是否发生了重定向。相关的控制器代码是:

if ( Auth::attempt(Input::only(array('username', 'password')), 
Input::has('remember_me')) ) 
{
    Session::put('client.id', Auth::user()->client->id);
    Session::put('client.name', Auth::user()->client->name);
    return Redirect::intended('admin/listings');
}

我的测试看起来像这样:

public function testValidCredentialsRedirectToDashboard() {
    Auth::shouldReceive('attempt')->once()->andReturn(true);
    // Auth::makePartial();

    $this->call('POST', 'login',
        ['username'=>'foo', 'password'=>'bar']);

    $this->assertRedirectedTo('admin/dashboard');
}

当我离开makePartial来电评论时,phpunit会抱怨

Method Mockery_1_Illuminate_Auth_AuthManager::user() does not exist on this mock object

但如果我取消注释,xdebug会抱怨过多的递归:

Maximum function nesting level of '100' reached, aborting! 
in /.../vendor/mockery/mockery/library/Mockery/Loader/EvalLoader.php(16) : 
eval()'d code on line 307

(关闭xdebug只会产生分段错误。)

我可以模拟用户方法,但我觉得这样的测试与实现过于接近。我不想测试那里发生的会话内容,只是尝试登录并重定向。

为什么makePartial在这里如此悲惨地失败?

0 个答案:

没有答案