Elixir/Plug/Phoenix:调用停止不会阻止下游插件在测试期间被调用
Elixir/Plug/Phoenix: Calling halt doesn't stop downstream plugs from getting invoked during test
如果我启动我的 phoenix 应用程序实例并向其发出请求,我的插件将适当停止。但是,在测试环境中执行相同操作时,halt 不会阻止调用下游的插件,这会导致我的测试失败。我认为问题可能来自我在测试期间调用路由器的方式。这是我正在使用的辅助函数,它大量借鉴了 phoenix 框架本身的类似函数:
def call(router, verb, path, params \ nil, headers \ []) do
add_headers(conn(verb, path, params), headers)
|> Plug.Conn.fetch_params
|> Plug.Parsers.call(parsers: [Plug.Parsers.JSON],
pass: ["*/*"],
json_decoder: Poison)
|> router.call(router.init([]))
end
关于为什么像这样调用我的路由器会导致停止工作的任何想法?
编辑:所以我要升级到 Phoenix 0.13.1 以便使用他们的新端点测试模块而不是我推出的助手。我会报告这是否解决了问题。
halt
仅在插件管道内有效。如果您手动管道,则需要手动检查是否停止。
老实说,我会放弃你当前的管道,只调用你测试中的实际端点。端点管道非常快,您真的不会看到任何减速。
如果我启动我的 phoenix 应用程序实例并向其发出请求,我的插件将适当停止。但是,在测试环境中执行相同操作时,halt 不会阻止调用下游的插件,这会导致我的测试失败。我认为问题可能来自我在测试期间调用路由器的方式。这是我正在使用的辅助函数,它大量借鉴了 phoenix 框架本身的类似函数:
def call(router, verb, path, params \ nil, headers \ []) do
add_headers(conn(verb, path, params), headers)
|> Plug.Conn.fetch_params
|> Plug.Parsers.call(parsers: [Plug.Parsers.JSON],
pass: ["*/*"],
json_decoder: Poison)
|> router.call(router.init([]))
end
关于为什么像这样调用我的路由器会导致停止工作的任何想法?
编辑:所以我要升级到 Phoenix 0.13.1 以便使用他们的新端点测试模块而不是我推出的助手。我会报告这是否解决了问题。
halt
仅在插件管道内有效。如果您手动管道,则需要手动检查是否停止。
老实说,我会放弃你当前的管道,只调用你测试中的实际端点。端点管道非常快,您真的不会看到任何减速。