We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Post 19
Game Site Journal - 11 Tests
Published on: 2025-04-21
Tags:
elixir, Blog, Side Project, Testing, LiveView, Game Site, Deployment, Html/CSS
So for this one I wanted to go over what I had to do to test some things for the Games that I created.
First and foremost I needed to set the setup for the series of tests.
describe "Guessing" do
setup do
user = user_fixture()
game = game_fixture(%{game_id: 1})
%{user: user, game: game}
end
This sets the initial state for the rest of the tests. What ever you end the setup with is what you can pass to the individual tests.
Once that was done we need to be sure to add %{conn: conn, user: user}
test "test", %{conn: conn, user: user} do
....
end
Now that we have the intitial state in every test we need to be sure to log in the user, and then visit the route for the game we want to test
conn =
conn
|> log_in_user(user)
{:ok, view, html} = live(conn, ~p"/1")
You might notice 2 things html and view
html is the rendered html for the page
view (often called lv or live_view in tests) is your handle to the running LiveView process
with these to 2 things you can:
test any value that you might have in the rendered page
or get the values for the current state of the page
to get the values for the page you must retrieve the socket from the view, I created a private function for this.
defp get_socket(view) do
state = :sys.get_state(view.pid)
state.socket
end
So for any test that I need to know the random value, ie answer in this case I can get that and test a "good answer"
Ill show you a full test for a good answer below
test "good guess", %{conn: conn, user: user} do
conn =
conn
|> log_in_user(user)
{:ok, view, _html} = live(conn, ~p"/1")
socket = get_socket(view)
answer = socket.assigns.answer
{:noreply, new_socket} =
GameSiteWeb.GuessingLive.handle_event(
"answer",
%{"guess" => to_string(answer), "wager" => "2"},
socket
)
assert new_socket.assigns.attempt == 1
assert new_socket.assigns.wager == 2
assert new_socket.assigns.score == 12
assert Phoenix.Flash.get(new_socket.assigns.flash, :info) == "Correct!"
end
I hope this helps with making good test cases for the code you will build.