Packages
Bypass provides a quick way to create a custom plug that can be put in place instead of an actual HTTP server to return prebaked responses to client requests. This is helpful when you want to create a mock HTTP server and test how your HTTP client handles different types of server responses.
Current section
Files
Jump to
Current section
Files
lib/bypass.ex
defmodule Bypass do
defstruct pid: nil, port: nil
def open do
{:ok, pid, port} = Supervisor.start_child(Bypass.Supervisor, [])
ExUnit.Callbacks.on_exit({Bypass, pid}, fn ->
case Bypass.Instance.call(pid, :on_exit) do
:ok -> :ok
{:error, :not_called} -> raise ExUnit.AssertionError, "No HTTP request arrived at Bypass"
{:exit, {class, reason, stacktrace}} -> :erlang.raise(class, reason, stacktrace)
end
end)
%Bypass{pid: pid, port: port}
end
def up(%Bypass{pid: pid}), do: Bypass.Instance.call(pid, :up)
def down(%Bypass{pid: pid}), do: Bypass.Instance.call(pid, :down)
def expect(%Bypass{pid: pid}, fun), do: Bypass.Instance.call(pid, {:expect, fun})
def pass(%Bypass{pid: pid}), do: Bypass.Instance.call(pid, {:put_expect_result, :ok})
end