5

現在、OmniAuth を使用してユーザーの作成と認証を行うアプリケーションを作成しています。Factory Girl が OmniAuth なしではユーザーを生成できないため、テスト中に問題が発生しました。

factory girl に omniauth でユーザーを作成させる方法はいくつかありますが、どれも成功していません。

次の 2 行を spec_helper ファイルに追加しました。

OmniAuth.config.test_mode = true \\ allows me to fake signins
OmniAuth.config.add_mock(:twitter, { :uid => '12345', :info => { :nickname => 'Joe Blow' }})

現在のfactory.rb

FactoryGirl.define do
  factory :user do
    provider "twitter"
    sequence(:uid) { |n| "#{n}" }
    sequence(:name) { |n| "Person_#{n}" }
  end
end

ユーザーが生成されていないため、次のテストは現在失敗しています

let(:user) { FactoryGirl.create(:user) }
before { sign_in user }

describe "registering" do

  it "should increment" do
    expect do
      click_button 'register'
    end.to change(user.rounds, :count).by(1)
end

Factory Girl が OmniAuth でテスト ユーザーを作成できるようにするには、工場/テストをどのように変更すればよいですか?

編集: RailsCast ガイドを使用して Omniauth をセットアップしました。

#create function inside user.rb
def self.create_with_omniauth(auth)
  create! do |user|
    user.provider = auth["provider"]
    user.uid = auth["uid"]
    user.name = auth["info"]["name"]
  end
end

うまくいけばまた役に立つ

#create inside the session_controller
def create
  auth = request.env["omniauth.auth"]
  user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) ||    User.create_with_omniauth(auth)
  session[:user_id] = user.id
  redirect_to root_url, :notice => "Signed in!"
end
4

1 に答える 1

2

テストセットアップのどこかで次のことを行うことを覚えていますか?

request.env ["omniauth.auth"] = OmniAuth.config.mock_auth [:twitter]

そうした場合、ユーザーのUIDがモックUIDと一致しない可能性はありますか?

ファクトリ定義をからsequence(:uid) { |n| "#{n}" }に変更してみてくださいuid '12345'

于 2012-07-11T05:33:59.967 に答える