5

Tôi hiện đang tạo một ứng dụng sử dụng OmniAuth để tạo và xác thực người dùng. Tôi gặp phải sự cố trong khi thử nghiệm do Factory Girl không thể tạo người dùng mà không có OmniAuth.Tạo người dùng trong Factory Girl với OmniAuth?

Tôi có nhiều cách khác nhau để có được nhà máy để tạo người dùng với omniauth nhưng không có cách nào thành công.

Tôi đã thêm 2 dòng sau vào tập tin spec_helper tôi

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

factories.rb hiện

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

Các thử nghiệm sau đây hiện không thành công vì không có người dùng đang được tạo

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 

Tôi nên thay đổi nhà máy/thử nghiệm của mình như thế nào để có được Factory Girl để tạo người dùng thử nghiệm OmniAuth?

Edit: tôi sử dụng 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 

hy vọng cũng hữu ích

#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

Có thêm thông tin mà tôi có thể cung cấp để giúp các bạn giúp tôi không? – SomberClock

Trả lời

2

Bạn nhớ phải làm như sau đâu đó trong thiết lập thử nghiệm?

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

Nếu bạn đã làm, là nó có thể UID của người dùng không phù hợp với uid giả?

Bạn có thể thử thay đổi định nghĩa nhà máy từ sequence(:uid) { |n| "#{n}" } thành uid '12345'.

+0

Cảm ơn bạn rất nhiều! – SomberClock

Các vấn đề liên quan