我在控制器中进行一些单元测试,在我的网络应用中处理一些身份验证。我正在测试有效登录时是否发生了重定向。相关的控制器代码是:
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
在这里如此悲惨地失败?