2013-11-20 107 views
1

我尝试在嘲笑中测试我的控制器在laravel中的操作。我已阅读本教程在这里:Laravel控制器测试与嘲笑

http://culttt.com/2013/07/15/how-to-structure-testable-controllers-in-laravel-4/

我用DI在我的构造是这样的:

public function __construct(User $user, Cartalyst\Sentry\Sentry $sentry) 
{ 
    $this->user = $user; 
    $this->sentry = $sentry; 

    ... 

} 

我的问题是在我的控制器下面的代码:

public function getShow($id) 
{ 
    try 
    { 
     // this is a problem, because I dont know how to tell mockery, to mock the 
     // Userprovider 
     $user = $this->sentry->getUserProvider()->findById($id); 
     // this is not a problem for me 
     $this->user->all(); 

     ... 

我我试图与Mockery一起作为一个模拟框架。我的问题是如何模拟像$ this-> sentry-> getUserProvider()(Cartalyst Sentry是一个高级授权包)的调用。嘲笑用户模型我写:

$this->user = Mockery::mock('Eloquent', 'User'); 

任何想法如何嘲笑Userprovider或者我应该处理这个以另一种方式?我想测试我的UserController,如果我根据id获取用户详细信息。

+1

你嘲笑哨兵,并让它返回一个嘲弄的userProvider。 '$ sentryMock-> shouldReceive('getUserProvider') - > times(1) - > andReturn($ userProviderMock);' – Mike

回答

2

您可以存根getUserProvider方法返回另一个存根,例如

$sentry = m::mock("F\Q\C\N\Sentry"); 
$userProvider = m::mock("F\Q\C\N\UserProvider"); 
$sentry->shouldReceive("getUserProvider")->andReturn($userProvider)->byDefault(); 

$userProvider->shouldReceive("findById")->andReturn(new User); 
+0

谢谢大家。这帮助了我很多,因为我是新手嘲笑。 – okarahan