2016-08-01 83 views
1

我想寫一個類,它將讀取它構造的構造函數給出的路線。然而,即使經過1小時的Google搜索,我也沒有找到任何如何訪問Laravel Controller的getRouter方法 - 因爲it's a static function。 我嘗試過很多事情,但大部分時間我得到了以下錯誤:如何在PhpSpec中訪問Laravel Controller的靜態屬性?

Uncaught Error: Using $this when not in object context in
vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCreator.php(49) :
eval()'d code:13
Stack trace: #0 [internal function]: Double\Illuminate\Routing\Controller\P4::getRouter()

我怎樣才能做到這一點或者這只是不可能PhpSpec?

我的規格:

use Illuminate\Routing\Controller; 
use PhpSpec\ObjectBehavior; 
use Prophecy\Argument; 

class OptionDescriberSpec extends ObjectBehavior 
{ 

    function let(Controller $controller) 
    { 
     $this->beConstructedWith($controller); 
    } 

    function it_should_read_the_aviable_routes_of_the_controller() 
    { 
     $this->getController()->getRouter()->shouldReturn('Router'); 
     $this->render()->shouldReturn('Router'); 
    } 
} 

我的班級:

use Illuminate\Routing\Controller; 

class OptionDescriber 
{ 

    /** 
    * @var Controller 
    */ 
    protected $controller; 

    /** 
    * OptionDescriber constructor. 
    * 
    * @param Controller $controller 
    */ 
    public function __construct(Controller $controller) 
    { 
     $this->controller = $controller; 
    } 

    public function render() 
    { 
     return $this->controller->getRouter(); 
    } 
} 

回答

0
function it_should_read_the_aviable_routes_of_the_controller(Controller $controller, Router $router) 
{ 
    $this->getController()->willReturn($controller); 
    $controller->getRouter()->willReturn($router); 

    $this->render()->shouldReturn($router); 
} 

Alltough我們不推薦符合規格的控制器。使控制器儘可能薄,並將「肉」移動到控制器使用的服務中。