Some typos and confusing bits I’ve noticed in the first 100 pages or so:
- pp 12: “Now, start the web server” – the output snippet should include the
mix phx.servercommand. It’s listed on the previous page in the output frommix phx.new pentobut no harm including it here (as withmix ecto.create). - pp 13: “You may have noticed that Phoenix fetched the dependencies on this list when you ran mix deps.get.” – I don’t remember
mix deps.getbeing mentioned before. That was presumably triggered implicitly by running the phx.new or phx.server task? - pp 51:
we'll execute the log_in_user/3 function implement by- implemented by
- pp 62:
When a live view first mounts in it’s disconnected state–s/it's/its - pp 69:
We get six failures.– I got 108 failures on first run ofmix test, so maybe the generated set of tests is bigger now… or it’s the result of attempting one of the exercises. - pp 70: But even after adding
:register_and_log_in_userI get 108 failures that look like this:
test/pento_web/live/product_live_test.exs:19
** (Postgrex.Error) ERROR 23502 (not_null_violation) null value in column "username" of relation "users" violates not-null constraint
table: users
column: username
Failing row contains (628, user-576460752303420725@example.com, $2b$04$MBV9BcBPEKPQZo1Go1tTSOypd4ecjocA5rw9BzqvocXmLGWf0y7Xm, null, 2024-02-29 23:57:26, 2024-02-29 23:57:26, null).
- I believe this happened because the exercise on page 61 involves adding a username field. I added it as unique and non-null in the migration and validations, but the generator in
accounts_fixtures.exdidn’t know about it. Maybe it adds fields based on theregistration_changesetfunction, where I hadn’t addedusernameto thecastcall.- Also, I tried
mix ecto.reseta few times but found it didn’t delete tables… turns out I neededMIX_ENV=test mix ecto.reset
- Also, I tried
Then:
1) test register user creates account and logs the user in (PentoWeb.UserRegistrationLiveTest)
test/pento_web/live/user_registration_live_test.exs:40
** (ArgumentError) could not find non-disabled input, select or textarea with name "user[username]" within:
To fix this, I added a username field to lib/pento_web/live/user_registration_live.ex. Another test failure required the addition of :username to the changeset.required test. I’m a bit wary of this sort of test coupling, where the test just duplicates and restates the implementation.
- pp 74:
The Ecto.Changeset.cast/4 function filters the user data we pass into params.–s/params/attrs - pp 80:
Changeset are–s/set/sets