Error Test for JSON-based APIs
Learn how to write our error test for testing JSON-based APIs.
We'll cover the following...
It’s common to have the success tests before the error tests, but that doesn’t mean we have to write them in that order.
Defining an error test
We’re going to start with the simplest test for this endpoint: our error case. Let’s add the following test inside of the describe block in user_controller_test.exs
:
Press + to interact
#file path -> test/not_skull_web/controllers/user_controller_test.exs#add this code at the indicated place mentioned in comments of test/not_skull_web/controllers/#user_controller_test.exs in the playground widgettest "error: does not update, returns errors when given invalid attributes",%{conn_with_token: conn_with_token,user: existing_user} doconn =put(conn_with_token, "/api/users/#{existing_user.id}", %{name: ""})assert body = json_response(conn, 422)user_from_db = Repo.get(User, existing_user.id)assert user_from_db == existing_useractual_errors = body["errors"]refute Enum.empty?(actual_errors)expected_error_keys = ["field", "message"]for error <- actual_errors doassert_unordered_lists_are_equal(actual: Map.keys(error),expected: expected_error_keys)endend
Let’s go over some more important features of this test:
-
The test accepts a context from the setup block, in this case giving it a user and a
Plug.Conn
that contains a header ...