Laravel 没有拿起 Mocked class

Laravel not picking up Mocked class

在我的控制器中,我使用的是 class,如下所示:

public function book($id, CalRequest $request)
{
    $event = $this->repo->find($id);

    (new CalAuthorisation())
        ->setEvent($event)
        ->canBook();

    $this->booking->book($event, $request);
}

我正在嘲笑 class,如下所示:

$auth = \Mockery::mock(CalAuthorisation::class)->makePartial();
$this->app->bind(CalAuthorisation::class, function() use ($auth) {
    return $auth;
});

$auth->shouldReceive('canBook')->once()->andReturn(true);

但是,如果我 ddcanBook() 函数中,我仍然会进入那里。我为 CalRequest class 准备了一个类似的模拟,效果很好。关于为什么这不起作用的任何建议!

依赖注入是指将不同的实现注入到您的逻辑中。当使用 new 关键字时,PHP 将获取某个 class,并且仅获取那个 class。 Laravel通过容器解决依赖注入,所以你必须使用容器才能工作。

有两种方法,使用app()resolve()。其次,您可以将 classes 注入 Laravel classes 上的方法,例如作业、命令、控制器等,这将通过容器解决。

使用 resolve().

resolve(new CalAuthorisation())
    ->setEvent($event)
    ->canBook();

通过控制器方法注入它。

public function book($id, CalRequest $request, CalAuthorisation $calAuth)
{
    $event = $this->repo->find($id);

    $calAuth->setEvent($event)
        ->canBook();