Programming Phoenix >= 1.4

book-programming-phoenix
phoenix

#1

I am working my way through B5.0

So far I am upto the unit testing chapter (chapter 8).

I am getting errors in the tests. Has anyone got this chapter working on a public repo?

I have posted where I have got to on:

github.com/chriseyre2000/rubl_1_4 on branch chapter-8-problems


#2

Hi @chriseyre. Which tests and what errors? Can you please be more specific? Please paste your code here. It makes it harder having to go to the repo, switch branches, and look for the code.


#3

It’s these tests:

test “requires user authentication on all actions”, %{conn: conn} do
Enum.each([
get(conn, Routes.video_path(conn, :new)),
get(conn, Routes.video_path(conn, :index)),
get(conn, Routes.video_path(conn, :show, 123)),
get(conn, Routes.video_path(conn, :edit, 123)),
put(conn, Routes.video_path(conn, :update, 123, %{})),
post(conn, Routes.video_path(conn, :create, %{})),
delete(conn, Routes.video_path(conn, :delete, “123”)),
], fn conn ->
assert html_response(conn, 302)
assert conn.halted
end)
end

Here is the error:

  1. test requires user authentication on all actions (RumbleWeb.VideoControllerTest)
    test/rumbl_web/controllers/video_controller_test.exs:4
    ** (Plug.Conn.AlreadySentError) the response was already sent
    code: get(conn, Routes.video_path(conn, :new)),
    stacktrace:
    (phoenix) lib/phoenix/controller.ex:525: Phoenix.Controller.put_new_layout/2
    (rumbl) lib/rumbl_web/controllers/video_controller.ex:1: RumblWeb.VideoController.phoenix_controller_pipeline/2
    (rumbl) lib/rumbl_web/endpoint.ex:1: RumblWeb.Endpoint.instrument/4
    (phoenix) lib/phoenix/router.ex:275: Phoenix.Router.call/1
    (rumbl) lib/rumbl_web/endpoint.ex:1: RumblWeb.Endpoint.plug_builder_call/2
    (rumbl) lib/rumbl_web/endpoint.ex:1: RumblWeb.Endpoint.call/2
    (phoenix) lib/phoenix/test/conn_test.ex:235: Phoenix.ConnTest.dispatch/5
    test/rumbl_web/controllers/video_controller_test.exs:6: (test)

#4

I can’t take a deep look, but I suspect it’s because you are reusing the connection. Try making a copy of conn and reusing it for each test?


#5

You may have a missing halt() in the auth controller. Check out the source code distributed with the book.

Also I tried to run your code but it looks like you didn’t push the recent version or something, the code on the repo is not changed as described in the “Using tags” section from this chapter so I’m getting other errors.


#6

Hi @chriseyre, you can check my code here. It seems the test is working fine for me - https://github.com/imeraj/Phoenix_Playground/tree/master/1.4/rumbl