我有一个带有创建功能的控制器,如下所示:
def create(conn, %{"data" => refinement_params}) do
case Repo.insert %Refinement{ refinement_code: refinement_params["refinement_code"], team_name: refinement_params["team_name"], organization_id: conn.assigns[:organization_id]} do
{:ok, model} -> json conn, %{refinement_code: model.refinement_code}
{:error, changeset} -> conn |> send_resp(500, "")
end
end
我在模型的变更集中有一个 validate_length(:refinement_code,min:5)子句。如果我使用web REST工具向控制器发布一个空的refinement_code,我会按预期得到500响应。
在控制器的测试中,我有以下内容:
@invalid_attrs %{refinement_code: "", team_name: ""}
test "/api call to create a voting session with creds but invalid data gets an error code", %{conn: conn} do
organization = Repo.insert! %Organization{domain: "test.com", email: "test.tester@test.com"}
conn = recycle(conn)
|> put_req_header("unique_code", organization.unique_code)
|> put_req_header("domain", organization.domain)
conn = post conn, "/api/refinements", data: @invalid_attrs
assert conn.status == 500
end
在这种情况下,出于某种原因, conn.status 是200。为什么测试失败了?
答案 0 :(得分:2)
您未在控制器操作中使用变更集,因此无法运行验证。我会检查日志是否有其他原因导致您的网络请求失败。
要使控制器操作使用变更集及其验证,您需要使用以下内容:
changeset = Refinement.changeset(%Refinement{}, refinement_params)
case Repo.insert(changeset) do
....