Не удается переопределить::shouldReceive() при тестировании Фасада
Согласно документам Laravel, я должен быть в состоянии издеваться над фасадом через Object::shouldReceive()
, но когда я это делаю, он говорит, что не может переопределить метод. Представление работает правильно, когда я просматриваю его в своем браузере, мне просто нужно выяснить, как правильно это проверить.
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');
}
Вот мой контроллер:
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...");
}
1 ответ
Вы пытаетесь издеваться над уже издевались над классом. Посмотрите, зарегистрировали ли вы свой сервис где-то как фасад - у Laravel есть много автоматически генерируемых значений по умолчанию, которые трудно заметить. Вот фасады должны получить метод:
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());
}