4

我知道使用 ruby​​/rspec,您可以执行以下操作,以便为对该方法进行的不同调用接收不同的返回值:

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

我只能使 meck 存根成为一个具有一个返回值的方法,如下所示:

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

有没有办法让它ok在第一次调用时返回,然后ok2在第二次调用时返回?

4

2 回答 2

7

为此,您可以使用 Meck 中的两个快捷方式:

  • 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
    
于 2015-07-18T13:07:57.757 回答
5

您可以通过在第一次调用 expectaction 函数时重新定义它来做到这一点:

meck:expect(module,
            some_method, 
            fun() ->
                     %% Redefine the expect fun for next invocation
                     meck:expect(module,
                                 some_method,
                                 fun() ->
                                          ok2 
                                 end),
                     ok
            end).
于 2015-07-17T21:14:08.823 回答