gpt4 book ai didi

php - 测试 Facade 时无法重新声明::shouldReceive()

转载 作者:行者123 更新时间:2023-12-03 02:04:01 24 4
gpt4 key购买 nike

根据Laravel docs ,我应该能够通过 Object::shouldReceive() 模拟外观,但是当我这样做时,它说我无法重新声明该方法。当我在浏览器中查看该 View 时,该 View 可以正常工作,我只需要弄清楚如何正确测试它。

无法在/path-to-project/vendor/mockery/mockery/library/Mockery/Loader/EvalLoader.php(16) 中重新声明 Mockery_1_Facades_MyService::shouldReceive() :第 672 行的 eval() 代码

这是我的测试:

public function testSend()
{
MessageService::shouldReceive('find')->once()->with(1);

$this->call('GET', '/message/1/send');

$this->assertRedirectedToRoute('message.index');
}

这是我的 Controller :

public function send($id)
{
$message = MessageService::find($id);
$this->messageService->sendBroadcast($message);

return Redirect::route('message.index')
->with('message', "Sending message: {$message->name}, stand by...");
}

最佳答案

您正在尝试模拟已经模拟的类。查看您是否已将服务注册为外观 - Laravel 有很多自动生成的默认值,这是很难注意到的。这是一个外观 shouldReceive 方法:

public static function shouldReceive()
{
$name = static::getFacadeAccessor();

if (static::isMock())
{
$mock = static::$resolvedInstance[$name];
}
else
{
$mock = static::createFreshMockInstance($name);
}

return call_user_func_array(array($mock, 'shouldReceive'), func_get_args());
}

关于php - 测试 Facade 时无法重新声明::shouldReceive(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21503652/

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