Как звонить через реальный класс по не предусмотренным сценариям на издевательстве - PullRequest
0 голосов
/ 27 июня 2018

Учитывая этот класс:

MyClass
{   
    public function getValueFrom($foo)
    {
        return 'data';
    }
}

Я хочу проверить определенные вызовы функции getValueFrom с конкретными аргументами:

$mock = Mockery::mock(MyClass);
$mock->shouldReceive('getValueFrom')
    ->with('foo')
    ->once()
    ->andReturn('bar');

(new MyClass)->foo('foo'); // returns bar
(new MyClass)->foo('someting-else'); // throws Mockery\Exception\NoMatchingExpectationException

Если я вызываю тот же метод с аргументами, отличными от 'foo', он генерирует исключение NoMatchingExpectationException. Как делегировать реальному классу не предусмотренные сценарии? Предполагаемое поведение:

$mock = Mockery::mock(MyClass);
$mock->shouldReceive('getValueFrom')
    ->with('foo')
    ->once()
    ->andReturn('bar');

(new MyClass)->foo('foo'); // returns bar
(new MyClass)->foo('someting-else'); // return data
(new MyClass)->foo('anything-else'); // return data

1 Ответ

0 голосов
/ 27 июня 2018

Во избежание комментариев, это будет работать:

$mock = Mockery::mock(MyClass);
$mock->shouldReceive('getValueFrom')
    ->with('foo')
    ->once()
    ->andReturn('bar');

// here!!
$mock->shouldDeferMissing();

(new MyClass)->foo('foo'); // returns bar
(new MyClass)->foo('someting-else'); // return data
(new MyClass)->foo('anything-else'); // return data
...