2016-04-08 3 views
0

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

вот что я пытался

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

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

Издевательство \ Exception \ NoMatchingExpectationException: Нет сопоставления обработчика найдено для Mockery_2__FooBar_ClassA :: есть ("бар")

i читать 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; 
    } 
}); 

кого-то есть какие-то идеи?

я также прочитал Mockery specifying expected arguments for multiple calls

но то же самое я пытался, это заставляет проверку на тип параметра.

ответ

0

ок я нашел ответ

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

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