We use mirage with test-controlled response timings to be able to acceptance test loading states. Works great.
You can also configure a universal delay if you’re using mirage in development and want to get a feel for your app with a certain amount of latency.