Я пытаюсь проверить метод класса в моем проекте Laravel с насмешкой.
Тем не менее, когда я пытаюсь протестировать phpunit, класс интерфейса (который используется в методе, который мне нужен для тестирования) не является экземпляром.
В чем дело?
Мой тестовый класс
class HelperRSTest extends TestCase {
public function tearDown()
{
Mockery::close();
}
public function test_mockery()
{
// $mock = Mockery::mock('HelperRS');
// $mock->shouldReceive('getRecibosLocacao')->once()->andReturn('mocked');
$result = HelperRS::getRecibosLocacao(1228);
var_dump($result);
}
}
Мой целевой класс для тестирования
class HelperRS extends \BaseController {
public static function getRecibosLocacao($id_locacao){
$pagamentos = App::make('PagamentoRepositoryInterface');
$locacao = Locacao::find($id_locacao);
$pagamento = $pagamentos->getByVendaByTipo($locacao->cod_locacao, 'l');
dd($pagamento);
}
}
Ошибка:
1) HelperRSTest::test_mockery
Illuminate\Container\BindingResolutionException: Target [PagamentoRepositoryInterface] is not instantiable.
Метод, который вы вызываете в HelperRS, является статическим методом, тогда как вы создаете макетированный экземпляр этого класса и фактически ничего не делаете с ним. Вы можете добиться этого с помощью насмешек, хотя это не рекомендуется и потребует от вас выполнения теста в изоляции процесса.
$mock = Mockery::mock('alias:HelperRS');
$mock->shouldReceive('getRecibosLocacao')->once()->andReturn('mocked');
Других решений пока нет …