Как указать частичный макет для фасада Laravel?

Сначала я попробовал это

$mock = m::mock('Cartalyst\Sentry\Facades\Laravel\Sentry');
$mock->shouldReceive('getUser')->once()->andReturn($userInst);

Но это дало мне

Fatal error: Cannot redeclare Mockery_1964315998_Cartalyst_Sentry_Facades_Laravel_Sentry::shouldReceive()

Затем я узнал, что фасады Laravel уже реализуют Mockery, поэтому я попробовал непосредственно на фасаде.

Sentry::shouldReceive('getUser')->once()->andReturn($userInst);

Но теперь проблема в том, что он не находит другие функции для этих объектов, по сути, мне нужно поведение частичного макета, но я не понимаю, как это сказать.

BadMethodCallException: Method Mockery_2115409749_Cartalyst_Sentry_Sentry::check() does not exist on this mock object

Это то, что мне нужно

A traditional partial mock defined ahead of time which methods of a class are to be mocked and which are to left unmocked (i.e. callable as normal). The syntax for creating traditional mocks is:

$mock = \Mockery::mock('MyClass[foo,bar]');
In the above example, the foo() and bar() methods of MyClass will be mocked but no other MyClass methods are touched. You will need to define expectations for the foo() and bar() methods to dictate their mocked behaviour.

person user391986    schedule 14.01.2014    source источник


Ответы (1)


можешь попробовать добавить

Sentry::getFacadeRoot()->makePartial();

после

Sentry::shouldReceive('getUser')
      ->once()
      ->andReturn($userInst);
person lisiu    schedule 17.01.2014