5

Aktualnie tworzę aplikację, która używa OmniAuth do tworzenia i uwierzytelniania użytkowników. Podczas testowania napotykam problemy, ponieważ Factory Girl nie może generować użytkowników bez OmniAuth.Tworzenie użytkowników w programie Factory Girl z OmniAuth?

Mam kilka różnych sposobów na to, aby dziewczyna z fabryki mogła tworzyć użytkowników za pomocą omniauth, ale żadna nie odniosła sukcesu.

Dodałem następujące 2 linie do mojego pliku spec_helper

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

prąd factories.rb

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

Poniższa próba nie powiedzie się, ponieważ obecnie żaden użytkownik nie jest generowany

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 

Jak powinienem zmienić swoje fabryki/testy, aby Factory Girl stworzyła użytkowników testowych OmniAuth?

Edit: Użyłem 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 

nadzieją również użyteczne

#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

Czy mogę podać więcej informacji, które pomogą mi pomóc? – SomberClock

Odpowiedz

2

Czy pamiętać, aby wykonać następujące czynności gdzieś w konfiguracji testowej?

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

Jeśli tak, to jest możliwe UID użytkownika nie pasuje do makiety UID?

Możesz spróbować zmienić definicję fabryczną z sequence(:uid) { |n| "#{n}" } na uid '12345'.

+0

Dziękuję bardzo! – SomberClock