在我使用的update
测试中:
%{resp_body: body} = conn
|> sign_in
|> patch(asset_path(conn, :update), Poison.encode!(payload))
我收到此错误:
** (ArgumentError) No action :update for helper Web.Router.Helpers.asset_path/2. The following actions/clauses are supported:
asset_path(conn_or_endpoint, :create, , opts \\ [])
asset_path(conn_or_endpoint, :delete, id, opts \\ [])
asset_path(conn_or_endpoint, :edit, id, opts \\ [])
asset_path(conn_or_endpoint, :index, , opts \\ [])
asset_path(conn_or_endpoint, :new, , opts \\ [])
asset_path(conn_or_endpoint, :show, id, opts \\ [])
asset_path(conn_or_endpoint, :update, id, opts \\ [])
code: |> post(asset_path(conn, :update), Poison.encode!(payload))
stacktrace:
(phoenix) lib/phoenix/router/helpers.ex:299: Phoenix.Router.Helpers.raise_route_error/5
test/controllers/asset_controller_test.exs:167: (test)
当我使用Postman直接测试时,它可以正常工作。
我在post(asset_path(conn, :create), Poison.encode!(payload))
操作中使用了insert
,它运行正常。
这是邮递员的快照,表明代码工作正常,测试失败。
答案 0 :(得分:2)
update
路由以及asset_path
update
操作需要资源的ID。您需要将其作为asset_path
的第三个参数传递,例如
|> patch(asset_path(conn, :update, id), Poison.encode!(payload))
id
应该是您尝试更新的记录的id
答案 1 :(得分:0)
您可以输入 mix phx.routes 进行检查。更新操作始终需要id才能工作。所以传递id,它应该工作