Redisに対する並列テストの設定

以前 Qiita に書いたテストの並列化に関する続編もの。

Redis のインスタンス上で名前空間を使って、並列処理に対するリソース分割するのがリーズナブルなため、Gemfile に redis-namespace を使えるように指定する。

gem 'redis-namespace'

RSpec の場合は spec/spec_helper.rb に以下のような設定を書く。ここの例では、Rails.env の値と parallel_tests を使った際にもちいられる環境変数 ENV['TEST_ENV_NUMBER'] の値を並列分用意する名前空間としている。

config.before(:suite) do
  redis = Redis.new(host: host, port: port)
  Redis.current = Redis::Namespace.new("#{Rails.env}#{ENV['TEST_ENV_NUMBER']}", redis: redis)
end

...

config.after do
  redis = Redis.new(host: Settings.redis.host, port: Settings.redis.port)
  Redis::Namespace.new("#{Rails.env}#{ENV['TEST_ENV_NUMBER']}", redis: redis).flushdb
end

やり方はいろいろとあると思うので、よりよいアプローチを思いついたら手を加えて行きたい。