【问题标题】:How to access static property of Laravel Controller in PhpSpec?如何在 PhpSpec 中访问 Laravel 控制器的静态属性?
【发布时间】:2016-12-06 20:16:55
【问题描述】:

我正在尝试编写一个类,该类将读取构造它的构造函数给出的路由。但是,即使经过 1 小时的谷歌搜索,我也没有找到任何如何访问 Laravel 控制器的 getRouter 方法的信息——因为 it's a static function。 我已经尝试了很多东西,但大多数时候我都会遇到以下错误:

未捕获的错误:当不在对象上下文中时使用 $this
供应商/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCreator.php(49) :
eval()'d 代码:13
堆栈跟踪: #0【内部函数】: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();
    }
}

【问题讨论】:

    标签: php unit-testing laravel phpspec


    【解决方案1】:
    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);
    }
    

    虽然不建议指定控制器。使控制器尽可能薄,并将“肉”移动到控制器使用的服务中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多