Ruby on Rails - 测试 Redis 密钥过期时间



我想知道是否有人在 redis 密钥过期后有一种聪明的方法来测试行为。我实际上是在为我的应用程序构建一个小型 redis 支持的缓存,并希望测试在 redis 密钥设置为过期后会发生什么。

我正在使用 rspec 作为我的测试框架。我尝试使用 Timecop 在测试期间更改时间,但意识到它只会影响测试框架工作,而不会影响外部 redis 服务器。

我可以将 TTL 设置为 1,然后使用 sleep(1),但我宁愿不在我的测试中引入睡眠。

没有人有测试这个的好方法?

为什么不使用 http://redis.io/commands/expire 立即使密钥过期?

为测试环境解决此问题的正确方法是模拟 redis 客户端并让它返回预期值。我相信 redis 会做正确的事情并且正确实现,所以模拟这种交互可能比让测试实际击中 redis 更好。

redis_client.should_receive(:ttl).with(key).then_return(-1)

或者只是模拟对密钥的请求

redis_client.should_receive(:get).with(key).then_return(nil)

使用较新的 RSpecs 版本,

expect(redis_client).to receive(:get).with(key).and_return(value)

最新更新