Я новичок в Elixir, но при использовании Node мы часто возвращаемся раньше, но у меня возникают проблемы с тем, чтобы заставить работать код, похожий на ранний, в моих интеграционных тестах. Это моя проблема:
У меня есть этот метод в моем контроллере, который получает JSON в качестве параметра, мне нужно проверить, содержит ли JSON некоторые свойства (ключ и тип), если это не так Я хочу отправить клиенту сообщение об ошибке без необходимости выполнять остальную часть метода. Это отлично работает, когда я делаю запрос с помощью Insomnia или Postman, но не работает в моих интеграционных тестах. Код под условным условием выполняется, даже если условное выражение является ложным.
Это мой метод:
def create(conn, body) do
if !PayeeContext.check_for_required_fields(body), do: conn
|> send_resp(400, "Please provide Key and Type parameters")
%{"key" => key} = body
%{"type" => type} = body
validation_func = PayeeContext.validation_map(type)
case validation_func.(key) do
{:ok, _} ->
conn |> send_resp(200, "Request created successfully")
{:error, message} -> conn |> send_resp(400, message)
end
end
, и это мой тест
test "returns 400 if Key prop is missing", %{conn: conn} do
params = %{
key: "44187221816",
account: %{
account_type: "checking_account",
account_number: "00028363-6",
branch: "0001"
},
owner: %{
name: "Eve Montalvão"
}
}
response = conn |> post(Routes.payee_path(conn, :create, params))
assert response.status == 400
end
и мой PayeeContext .check_for_required_fields
def check_for_required_fields(fields) do
Enum.all?(@required_fields, fn field -> Map.has_key?(fields, field) end)
end
Что я делаю не так?