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);
但是,如果我 dd
在 canBook()
函数中,我仍然会进入那里。我为 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();
在我的控制器中,我使用的是 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);
但是,如果我 dd
在 canBook()
函数中,我仍然会进入那里。我为 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();