Насмешка для определения нескольких возможных значений ожидания

Я пытаюсь объявить ожидание, которое имеет два возможных значения в качестве параметра, на основе значения, которое я хочу, чтобы возвращаемое значение было другим.

Вот что я пробовал

$mock = m::mock('FooBar\ClassA');
$mock->shouldReceive('has')->with('foo')->andReturn(false);
$mock->shouldReceive('has')->with('bar')->andReturn(true);

я получаю эту ошибку

Mockery\Exception\NoMatchingExpectationException: не найден соответствующий обработчик для MockeryandReturnUsing_FooBar_ClassA::has("bar")

Я прочитал http://docs.mockery.io/en/latest/reference/expectations.html

но я не могу найти ответ. Я пытаюсь прибегнуть к прямолинейному решению проблемы с помощью andReturnUsing. Есть ли способ решить проблему без использования andReturnUsing?

$mock->shouldReceive('has')->andReturnUsing(function ($value) {
    switch ($value) {
    case 'foo': return false;
    case 'bar': return true;
    }
});

Я также читал Насмешки с указанием ожидаемых аргументов для нескольких вызовов

Но это то же самое, что я пробовал, это принудительная проверка типа параметра.


person DevZer0    schedule 08.04.2016    source источник


Ответы (1)


хорошо, я нашел ответ

$mock->shouldReceive('has')->withArgs(['foo'])->andReturnValues([false]);
$mock->shouldReceive('has')->withArgs(['bar'])->andReturnValues([true]);

поскольку withArgs — это просто оболочка вокруг with, я думаю, что также можно использовать with, но я думаю, что параметр должен быть внутри массива

person DevZer0    schedule 08.04.2016