読者です 読者をやめる 読者になる 読者になる

ぽかぽかウンティの自由帳

ぽかぽか動物園から投稿します。

rspec で factory girl を redis に対して使う

factory girl を Redis でも使いたいと思ったところ、普通に永続化周りの custom strategy を用意してくれていた。

factory_girl/GETTING_STARTED.md at master · thoughtbot/factory_girl · GitHub

spec/spec_helper.rb
class RedisBuildStrategy
  def association(_factory_runner); end

  def result(evaluation)
    evaluation.object.value
  end
end

class RedisCreateStrategy < RedisBuildStrategy
  def result(evaluation)
    # @see https://github.com/redis/redis-rb
    redis = Redis.new(host: '127.0.0.1', port: 6379, db: 1, driver: :hiredis)
    value = super
    value = value.is_a?(Hash) ? value.to_json : value
    redis.send(evaluation.object.command, evaluation.object.key, value)
  end
end

FactoryGirl.register_strategy(:redis_build, RedisBuildStrategy)
FactoryGirl.register_strategy(:redis_create, RedisCreateStrategy)
spec/factories/user.rb
FactoryGirl.define do
  factory :user, class: OpenStruct do
    command 'set'
    key 'users:1'
    value id: 1, name: 'ぽかぽかウンティ', sex: 'male'
  end
end
spec/features/users_spec.rb
require 'rails_helper'

feature 'ユーザーコントローラー' do
  background :each do
    FactoryGirl.redis_create(:user)
  end

  scenario 'ぽかぽかウンティの詳細ページ' do
    visit '/users/1'
    expect(page).to have_text 'ぽかぽかウンティ'
  end
end