Hey there! I’m coming from an OOP background and am new to Elixir so trying to understand testing strategies where I need to change a config variable for one specific test.
For example, I have a function which verifies a token is valid and I’d like to write a test that shows when then token is over max_age it is no longer valid. I am thinking of two possible approaches:
- Change max_age config variable to say 500ms for this specific test case, Sleep say 1000ms, verify it is no longer valid (preferred).
- Somehow change the system time in the test so it progresses a day and assert the token isnt valid (interesting idea but in this case doesn’t feel great).
Here’s some code:
defmodule Auth.Token do @context some_value def verify(token) do Phoenix.Token.verify( @context, MyApp.Endpoint.config(:socket_salt), token, max_age: MyApp.Endpoint.config(:token_max_age) ) end defmodule MyApp.AuthTest do use ExUnit.Case test "when: provide expired token, returns error" do #??? end end
In other languages I might have added token_max_age to the constructor as an optional option (could do the same here at the function level but I believe that opens up the possibility to use a poorly thought out max_age in production).
I also understand I can change the token_max_age config variable for the entire test suite but this seems like too broad of a solution.