Plug Parser Unsupported Media Type错误:在Exunit测试中删除请求

时间:2015-05-17 17:45:24

标签: elixir

在我的测试中,我使用json为每个路由命中路由器,而Plug.parser只接受json。这种方法很好,除了使用delete方法的测试,它总是因不支持的内容类型而失败:multipart / mixed。我发送一个带有删除请求的空体,我的应用程序/ json作为标题中的内容类型,但我认为_method参数导致它被拒绝为错误的内容类型 - 尽管这不会发生在put方法中应该还要求_method添加到请求正文中。

test "inactivate" do
  {id, token} = register
  response = Myapp.Router.call(conn(:delete, "/api/manager/tenants/" <> id, 
    [], headers: [{"content-type", "application/json"}, {"token", token}] ) |> Plug.Conn.fetch_params(), @opts)
  assert response.status == 200
end

当使用httprequester命中相同的删除路由时,它们可以正常工作,并且不会被插件解析器停止。 Router.call在测试中是否以不同方式处理http请求?

1 个答案:

答案 0 :(得分:1)

菲尼克斯现在发货MyApp.ConnCase。您应该在运行Controller测试时使用它。它为测试控制器提供了便利。每次调用像get conn(), "/"这样的http方法时,它都会通过端点和路由器中的插件堆栈。

在您的情况下,使用MyApp.ConnCase的删除请求就像:

conn = conn()
  |> put_req_header("content-type", "application/json")
  |> put_req_header("token", token)
  |> delete("/api/manager/tenants/" <> id, params)

assert response(conn, 200)

如果有帮助,请告诉我。