根据 Laravel docs ,我应该能够通过 Object::shouldReceive()
模拟外观,但是当我这样做时说我不能重新声明该方法。当我在浏览器中查看它时,该 View 可以正常工作,我只需要弄清楚如何正确测试它。Cannot redeclare Mockery_1_Facades_MyService::shouldReceive() in /path-to-project/vendor/mockery/mockery/library/Mockery/Loader/EvalLoader.php(16) : eval()'d code on line 672
这是我的测试:
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...");
}
最佳答案
您正在尝试模拟已经被模拟的类(class)。看看你是否已经在某处注册了你的服务作为外观 - 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/