2015-07-17 2 views
4

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

allow(double).to receive(:msg).and_return(value1, value2, value3) 

Я только был в состоянии сделать Мекк окурок метод с одним возвращаемым значением, как так:

meck:expect(module, some_method, fun() -> ok end) 

есть ли способ, чтобы сделать его вернуть ok по первому зову, а затем ok2 на секунду?

ответ

5

Чтобы сделать это, есть две клавиши быстрого доступа в Мекк вы можете использовать:

  • meck:sequence/4 Эта функция возвращает каждый элемент в последовательности до последнего элемента. Затем последний элемент возвращается бесконечно.

    6> meck:sequence(module, some_method, 0, [ok, ok2]). 
    ok 
    7> module:some_method(). 
    ok 
    8> module:some_method(). 
    ok2 
    9> module:some_method(). 
    ok2 
    
  • meck:loop/4 Эта функция возвращает каждый элемент в цикле. Когда последний элемент возвращается, он начинается с первого.

    10> meck:loop(module, some_method, 0, [ok, ok2]). 
    ok 
    11> module:some_method(). 
    ok 
    12> module:some_method(). 
    ok2 
    13> module:some_method(). 
    ok 
    
+0

Ницца! Я полностью пропустил эти функции. Это должен быть принятый ответ. – johlo

6

Вы можете сделать это переосмысление функция expectaction в первый раз это называется:

meck:expect(module, 
      some_method, 
      fun() -> 
        %% Redefine the expect fun for next invocation 
        meck:expect(module, 
           some_method, 
           fun() -> 
              ok2 
           end), 
        ok 
      end). 
+0

Черепахи весь путь вниз! – sanmiguel

Смежные вопросы