Laravel 5.8带有参数,DI和模拟的上下文绑定永远无法工作

时间:2019-07-04 12:43:32

标签: laravel unit-testing mocking

上下文绑定

$this->app->when(ImportCommand::class)
->needs(Foo::class)
->give(function() {
   return new Foo(env('IMPORT_BAR'));
});

ImportCommand类的构造函数中的依赖注入

这很好:

public function __construct(Foo $foo) {
   // Foo with the argument is now injected
}

对于测试类ImportCommand,我需要进行模拟

我想在我的导入测试类中模拟Foo,但这不起作用。

   $this->mock(Foo::class, function ($mock) {
      $mock->shouldReceive([
         'login' => true,
         'get' => true,
         'rename' => true,
      ]);
   });
   $this->artisan('foo:bar');

调用artisan命令时,将使用 real Foo类代替模拟。我该如何解决?

1 个答案:

答案 0 :(得分:0)

您应该能够对其进行上下文绑定,从我的角度来看,如何对其进行模拟尚不清楚,但是假设您可以使用Mockery或类似的方法来获得模拟的实例,可以使用{ {1}}方法。该实例需要包装在addContextualBinding中并返回。

closure