Ruby on rails Rails中是否有测试Redis逻辑的gem?
例如数据库清理器,或者在测试运行后默认清除数据存储。我找了又找不到。它可以是一个单独的测试数据存储,也可以是一个简单的名称空间,将所有Redis命令命名为一个测试名称空间 如果有人知道任何lemme know,否则我会写一个并操作它:)你可以试试。这是一个用纯ruby编写的伪redis实现 哦,是的,有。 我在所有需要测试Redis逻辑的项目中都使用它 它非常有用,而且与您当地的开发项目不在同一个数据库中,因此数据没有“混合”的危险 就是这样:我将此代码放在spec_helper.rb文件中,但如果您使用的是测试单元,则可以将其放在test_helper.rb中Ruby on rails Rails中是否有测试Redis逻辑的gem?,ruby-on-rails,ruby-on-rails-3,rubygems,redis,Ruby On Rails,Ruby On Rails 3,Rubygems,Redis,例如数据库清理器,或者在测试运行后默认清除数据存储。我找了又找不到。它可以是一个单独的测试数据存储,也可以是一个简单的名称空间,将所有Redis命令命名为一个测试名称空间 如果有人知道任何lemme know,否则我会写一个并操作它:)你可以试试。这是一个用纯ruby编写的伪redis实现 哦,是的,有。 我在所有需要测试Redis逻辑的项目中都使用它 它非常有用,而且与您当地的开发项目不在同一个数据库中,因此数据没有“混合”的危险 就是这样:我将此代码放在spec_helper.rb文件中,但
# ==========================> Redis test configuration
REDIS_PID = "#{Rails.root}/tmp/pids/redis-test.pid"
REDIS_CACHE_PATH = "#{Rails.root}/tmp/cache/"
Dir.mkdir "#{Rails.root}/tmp/pids" unless Dir.exists? "#{Rails.root}/tmp/pids"
Dir.mkdir "#{Rails.root}/tmp/cache" unless Dir.exists? "#{Rails.root}/tmp/cache"
config.before(:suite) do
redis_options = {
"daemonize" => 'yes',
"pidfile" => REDIS_PID,
"port" => 9736,
"timeout" => 300,
"save 900" => 1,
"save 300" => 1,
"save 60" => 10000,
"dbfilename" => "dump.rdb",
"dir" => REDIS_CACHE_PATH,
"loglevel" => "debug",
"logfile" => "stdout",
"databases" => 16
}.map { |k, v| "#{k} #{v}" }.join('\n')
`echo '#{redis_options}' | redis-server -`
end
config.after(:suite) do
%x{
cat #{REDIS_PID} | xargs kill -QUIT
rm -f #{REDIS_CACHE_PATH}dump.rdb
}
end
在使用rails和redis时,我使用不同的redis db或用于不同的环境。设置非常简单,类似于ActiveRecords数据库配置 首先,创建一个配置:(注释掉名称空间版本) 然后加载配置并通过初始值设定项连接到redis:
#config/initializers/redis.rb
REDIS_CONFIG = YAML.load( File.open( Rails.root.join("config/redis.yml") ) ).symbolize_keys
dflt = REDIS_CONFIG[:default].symbolize_keys
cnfg = dflt.merge(REDIS_CONFIG[Rails.env.to_sym].symbolize_keys) if REDIS_CONFIG[Rails.env.to_sym]
$redis = Redis.new(cnfg)
#$redis_ns = Redis::Namespace.new(cnfg[:namespace], :redis => $redis) if cnfg[:namespace]
# To clear out the db before each test
$redis.flushdb if Rails.env == "test"
如果您使用的是“redis命名空间”,请记住将其添加到您的GEM文件中。谢谢!如果可以的话,我会把你的两个答案都标记为正确:)我用过fakeredis,它很棒,但我有一个奇怪的问题。一切正常,除了我将数组存储在集合中,它将整个数组存储为字符串,不知道为什么。例如,如果我做$redis.sadd(“奇数编号”[1,3]),那么$redis.smembers(“奇数编号”)产生[“[1,3]”。顺便说一句,将每个值(1和3)单独相加就可以了。任何解决方案??jlundqvist,如果Rails.env=“test”在config/initializers/redis.rb中放置
$redis.flushdb,是否会在每次测试后自动清理redis db?或者我必须对此做些什么吗?@Meena每次测试运行之前,它都会清理redis db,而不是每个单独的测试。如果你想让Rails.env继续工作,它应该是Rails.env==“test”(双相等)!我做了编辑。
#config/initializers/redis.rb
REDIS_CONFIG = YAML.load( File.open( Rails.root.join("config/redis.yml") ) ).symbolize_keys
dflt = REDIS_CONFIG[:default].symbolize_keys
cnfg = dflt.merge(REDIS_CONFIG[Rails.env.to_sym].symbolize_keys) if REDIS_CONFIG[Rails.env.to_sym]
$redis = Redis.new(cnfg)
#$redis_ns = Redis::Namespace.new(cnfg[:namespace], :redis => $redis) if cnfg[:namespace]
# To clear out the db before each test
$redis.flushdb if Rails.env == "test"