5

Ich erstelle derzeit eine Anwendung, die OmniAuth zum Erstellen und Authentifizieren von Benutzern verwendet. Ich habe Probleme beim Testen, da Factory Girl keine Benutzer ohne OmniAuth generieren konnte.Erstellen Sie Benutzer in Factory Girl mit OmniAuth?

Ich habe mehrere verschiedene Möglichkeiten, Fabrikmädchen zu erhalten, um Benutzer mit Omniauth zu erstellen, aber keine waren erfolgreich.

Ich habe die folgenden zwei Zeilen in meiner spec_helper Datei

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

aktuelle factories.rb hinzugefügt

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

Der folgende Test nicht zur Zeit, da kein Benutzer erzeugt wird

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 

Wie sollte ich meine Fabriken/Tests ändern, damit Factory Girl Testbenutzer erstellen kann? OmniAuth?

Edit: Ich benutze das RailsCast guide to setup 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 

hoffentlich auch nützlich

#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 
+0

Gibt es weitere Informationen, die ich Ihnen zur Verfügung stellen könnte, um Ihnen zu helfen? – SomberClock

Antwort

2

Haben Sie das folgende irgendwo im Testaufbau zu tun erinnern?

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

Wenn ja, ist es möglich, die UID des Benutzers nicht den mock uid Vorstellungen?

Sie können versuchen, die Werksdefinition von sequence(:uid) { |n| "#{n}" } auf uid '12345' zu ändern.

+0

Vielen Dank! – SomberClock