-1
두 번째 테스트가 실패했습니다.[: pid] 상태로 전달되는 메시지가 실패하고 새로 생성 된 pid가 작동합니다.
1) test it jumps when it can (RunnerTest)
test/runner_test.exs:15
No message matching %{y: 1} after 100ms.
The process mailbox is empty.
stacktrace:
test/runner_test.exs:18: (test)
defmodule RunnerTest do
use ExUnit.Case
doctest Runner
setup_all do
{:ok, pid: spawn(fn -> Runner.input() end)}
end
test "it increases its x position", state do
avatar = %{x: 0, y: 0}
send state[:pid], {:run, self, avatar}
assert_receive %{x: 1}
end
test "it jumps when it can", state do
avatar = %{x: 0, y: 0}
send state[:pid], {:jump, self, avatar}
assert_receive %{y: 1}
end
end
러너 모듈 :
defmodule Runner do
def input do
receive do
{:run, sender, mover} -> send sender, run(mover)
{:jump, sender, mover} -> send sender, jump(mover)
end
end
defp run(mover) do
Map.merge(mover, %{x: mover.x + 1})
end
defp jump(mover) do
case {mover.y} do
{0} ->
Map.merge(mover, %{y: mover.y + 1})
_ ->
mover
end
end
end
이 테스트를 통과 :
test "it jumps when it can", state do
avatar = %{x: 0, y: 0}
pid = spawn(fn -> Runner.input() end)
send pid, {:jump, self, avatar}
assert_receive %{y: 1}
end
왜 1 개 테스트 (실행)이 다른 (점프) 설치 작업 만하지 않습니까?
당신은'receive' 다음에'input'을 다시 호출하지 않으므로, 당신의 프로세스는 아마도 1 개의 메시지에 응답 한 후에 죽어 가고있을 것입니다. – Dogbert
감사합니다. Dogbert! 매번 setup_all을 실행하는 데 착각했습니다. – quantumpotato