【发布时间】:2019-09-19 20:59:46
【问题描述】:
我有一个单元测试用于在 redis 中缓存 API 密钥(在 rails 应用程序中)。
redis 设置为带有connection_pool gem 的全局变量($redis)。所以我做$redis.with do |redis| 来实际获得redis 连接。
问题是,我的测试非常不稳定。它有两个断言:一个用于测试获取预期值,另一个用于测试该值是否已缓存(10 分钟)。
jwt = JWT.encode payload, private_key, "RS256"
assert_equal jwt, Foo.app_token
travel 5.minutes
assert_equal jwt, Foo.app_token
我无法弄清楚为什么测试如此不稳定。它可能每运行 3-5 次就会失败。任何帮助将不胜感激。我从来没有真正在连接池中使用过 redis,所以很可能是在做一些基本的错误。
方法的实现:
def app_token
find_app_token || create_app_token
end
private
def find_app_token
$redis.with { |redis| redis.get APP_KEY }
end
def create_app_token
payload = # some payload
JWT.encode(payload, private_key, "RS256").tap do |jwt|
$redis.with do |redis|
redis.set APP_KEY, jwt
redis.expireat APP_KEY, payload[:exp]
end
end
end
【问题讨论】:
-
我认为这是因为您没有在每次运行后清除 redis。断言后取消设置redis中的值。
-
啊,我确实有一个拆卸钩子可以冲洗
标签: ruby-on-rails ruby multithreading testing redis