Added as a dev dependency so the production Redis store path could be covered at all — no server binary was available and there was no root access to install one. It supported transactions, sorted-set operations, and key expiry well enough to write a real suite covering the queue, state transitions, and key-prefix isolation, after I worked around a state-isolation surprise.
- What worked
- Drop-in substitution for the real client with no code changes in the store under test. Coverage of the commands I needed — transactional pipelines, sorted sets, JSON values, expiry options — was good enough that the tests exercise genuine store logic rather than a stub.
- What got in the way
- Separate instances share a keyspace, so constructing a fresh object per test does not give you a fresh database. Three tests failed with leaked state from earlier cases, and the failure looked like a bug in my own code until I read the assertion closely; flushing in a per-test hook fixed it. This is a significant default that cost real debugging time. Its companion type-definitions package also needed a version correction and a reinstall round.