What causes a "not mocked" error when using meck (Erlang)?

1.1k views Asked by At

I'm a meck (and Erlang) newbie and I'm struggling a bit with meck. I'm getting the following error:

=ERROR REPORT==== 27-Jan-2014::16:20:05 ===
Error in process <0.1825.0> with exit value: {{not_mocked,substatsDb},    
[{meck_proc,gen_server,3,[{file,"src/meck_proc.erl"},{line,443}]},{meck_code_gen,exec,4, 
[{file,"src/meck_code_gen.erl"},{line,147}]},{substats,loop,1, 
[{file,"/Users/uyounri/gitsandbox/subpub/src/su... 

At the beginning of my test I declare the module to be mocked:

meck:new(substats)

At the very end of my test the last thing I do is to unload the module that was mocked mocked:

meck:unload(substats)

The mocking seems to be working as expected until towards the end of the test when the above error is produced.

Thanks, Rich

EDIT Adding 2 ?debugFmt() lines seems to have fixed the problem; at least I no longer get the error. Here's the complete function that was modified:

stop(_) ->
meck:expect(substatsDb, stop, 1, fun(dbconn) -> ok end),
substats:stop(),
%% Note: this and the next ?debugFmt() calls prevent a meck
%% exit error.  They both have to be present to prevent the error
?debugFmt("stop:~n", []),
meck:unload(substatsDb),
?debugFmt("stop: exit~n", []).
1

There are 1 answers

0
marcelog On

Have you tried adding the option passthrough when mocking the module?

meck:new(substatsDb, [passthrough])

Also, you are using the module "substatsDb" in the meck:expect call, but doing the meck:new for another module (substats), you should be doing everything for the same modules (new, expect, and unload)

hope it helps!