Thanks for sharing that. I took a look at CoreComponents.input
and found the definition was slightly varied. I changed this line:
# used to be:
# errors = if Phoenix.Component.used_input?(field), do: field.errors, else: []
errors = field.errors
and the test passes. This was a change in the latest implementation of CoreComponents, hence the difference.
Now, to get this test passing without modifying the above line, I had to tweak the test to pass in blank inputs:
test "invalid params is rejected", %{conn: conn} do
params = %{message: %{to: "", body: ""}}
conn = post(conn, ~p"/messages/new", params)
assert html_response(conn, 200) =~
Plug.HTML.html_escape("can't be blank")
end
We can look through the implementation of used_input?
to see why this works. By passing in the data, the form.params
field contains the input field, so it counts as “used”