gpt4 book ai didi

Laravel 5.8 带有参数、DI 和模拟的上下文绑定(bind)永远不会起作用

转载 作者:行者123 更新时间:2023-12-02 04:23:44 25 4
gpt4 key购买 nike

上下文绑定(bind)

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

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

这工作正常:
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 命令,将使用真正的 Foo 类而不是 mock。我怎样才能解决这个问题?

最佳答案

在遇到同样的问题并尝试了几件事后,我找到了容器 extend()方法效果最好。


$this->app->extend(Foo::class, function () {
return \Mockery::mock(Foo::class, function($mock) {
$mock->shouldReceive([...]);
});
});

我尝试过的其他事情,不成功
  • Container.afterResolve()
  • Container.bind()
  • TestCase.swap()
  • TestCase.instance()
  • 关于Laravel 5.8 带有参数、DI 和模拟的上下文绑定(bind)永远不会起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56888228/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com