facebookでOAuth認証をして。。。なんて動作をテストする時、
コントローラのrspecではkoalaを使ってこんな感じでテストユーザを作成する。
test_controller_spec.rb
before(:all) do
# DatabaseClearnerを使ってDBを初期化
DatabaseClearner.clean
# テストユーザ作成のためのインスタンスをつくる
@test_users = Koala::Facebook::TestUsers.new(
:app_id => OmniAuthConfig::FACEBOOK_API_KEY,
:secret => OmniAuthConfig::FACEBOOK_SECRET_API_KEY
)
# 何人のユーザと友だち関係にいるか
number_of_networks = 5
# 指定したアプリに登録しているかどうか
installed_status = true
# アプリの権限
permissions = 'publish_stream'
networks = @test_users.create_network(
number_of_networks,
installed_status,
permissions
)
@target = nil # 後のテストの為に、特定のユーザだけピックアップしておく
networks.each do |obj|
@target = obj if @target.nil?
# optionanl: 特殊な情報が必要であれば、graphインスタンスを生成して自分の情報を取得
graph = Koala::Facebook::API.new obj["access_token"]
u = graph.get_object("me")
# optional: 必要であれば、DBに情報を格納
User.create(
:fb_id => u["id"],
:name => u["name"]
)
end
end
after(:all) do
# 作成したテストユーザをすべて削除
@test_users.delete_all
end
難点は、テストユーザの作成に時間がかかるのと、facebookのテストユーザ作成がコケると、以降のテストが全部失敗すること。