我有这个测试
defmodule InfoSys.Backends.WolframTest do
use ExUnit.Case, async: true
alias InfoSys.WolFram
test "make request, report results, then terminates" do
ref = make_ref()
{:ok, pid} = WolFram.start_link("1 + 1", ref, self(), 1)
assert_receive {:results, ^ref, [%InfoSys.Result{text: "2"}]}
end
end
我正在接收
没有匹配的消息{:results,^ ref,[%InfoSys.Result {text:“2”}]} 100分钟后。
我如何知道哪条消息正在接收或如何调试此错误?我正在关注凤凰书编程实例
整个ExUnit堆栈跟踪:
1) test make request, report results, then terminates (InfoSys.Backends.WolframTest)
test/backends/wolfram_test.exs:6
No message matching {:results, ^ref, [%InfoSys.Result{text: "2"}]} after 100ms.
The following variables were pinned:
ref = #Reference<0.214527998.4009754625.219099>
The process mailbox is empty.
code: assert_receive {:results, ^ref, [%InfoSys.Result{text: "2"}]}
stacktrace:
test/backends/wolfram_test.exs:11: (test)
答案 0 :(得分:0)
我之前遇到过这类问题。有两个可能的原因:
我更喜欢排除第一种可能性,而我所做的就是让测试等待超过默认时间100 ms。 assert_receive
可以接收第二个参数,即以毫秒为单位的时间。你可以尝试这样的事情:
assert_receive {:results, ^ref, [%InfoSys.Result{text: "2"}]}, 5000
其中5000
表示5000毫秒或5秒。
在增加时间之后,运行这样的测试有两种可能的结果:
我已经看到了您正在使用的代码并且它并不太复杂(下次您应该将其作为问题的一部分发布),所以如果您没有&# 39;在5秒钟后你的测试中得到一个回复,那么你的过程肯定有问题&#39;代码。
我希望这会有所帮助。