Testing your app with Joken
One common hurdle with testing tokens is that they almost always contain time sensitive claims. How can you automate the expiration of your tokens for testing?
One possible solution to this problem is to have a different token configuration for your tests. This works but is not advisable since your production code will run a different path than your test code. Your tests might pass, but things can go wrong in production.
We have introduced an adapter for producing any time-sensitive claim values.
Joken.current_time/0 looks for the implementation it will use in the configuration. This is the adapter pattern that helps you mock time if you need to.
In our tests we have a
Joken.CurrentTime.Mock that can freeze or advance time in the way that we want. Please look in our test base for one possible solution.
We don't ship
Joken.CurrentTime.Mock in the library as this is only one possible way of solving this. If you already have a time mocking mechanism in your app, you can make Joken use it with:
config :joken, current_time_adapter: MyTimeMock
All it needs is to implement the function
It is also worth mentioning that
Joken.CurrentTime is a behaviour so you can use mocking libraries like