我正在尝试使用-- with等Plug.Test
来测试错误处理。Plug.ErrorHandler
assert conn.status == 406
我有defp handle_errors
(包含一条send_resp
语句),它似乎被调用了,但是,我的测试仍然失败,但仍然有同样的异常(好像handle_errors
没有效果)。
对示例高级插件(不是 Phoenix)应用程序的引用也将不胜感激。
我正在尝试使用-- with等Plug.Test
来测试错误处理。Plug.ErrorHandler
assert conn.status == 406
我有defp handle_errors
(包含一条send_resp
语句),它似乎被调用了,但是,我的测试仍然失败,但仍然有同样的异常(好像handle_errors
没有效果)。
对示例高级插件(不是 Phoenix)应用程序的引用也将不胜感激。
尝试这样的事情(未经测试):
defmodule NotAcceptableError do
defexception plug_status: 406, message: "not_acceptable"
end
defmodule Router do
use Plug.Router
use Plug.ErrorHandler
plug :match
plug :dispatch
get "/hello" do
raise NotAcceptableError
send_resp(conn, 200, "world")
end
def handle_errors(conn, %{kind: _kind, reason: reason, stack: _stack}) do
send_resp(conn, conn.status, reason.message)
end
end
test "error" do
conn = conn(:get, "/hello")
assert_raise Plug.Conn.WrapperError, "** (NotAcceptableError not_acceptable)", fn ->
Router.call(conn, [])
end
assert_received {:plug_conn, :sent}
assert {406, _headers, "not_acceptable"} = sent_resp(conn)
end
使用assert_error_sent/2断言您引发了错误并且它被包装并以特定状态发送。匹配其{status, headers, body}
返回值以断言 HTTP 响应的其余部分符合您的期望。
response = assert_error_sent 404, fn ->
get(build_conn(), "/users/not-found")
end
assert {404, [_h | _t], "Page not found"} = response