与OmniAuth创建工厂女孩的用户?(Create users in Factory Girl w

2019-09-19 05:56发布

我目前正在创建使用OmniAuth创建和验证用户的应用程序。 我因为测试,以工厂女孩是无法产生用户无需OmniAuth过程中遇到的问题。

我有几个不同的方式来获得工厂女孩创建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' }})

当前factories.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

我应该如何改变我的工厂/测试,以获得工厂女孩与O​​mniAuth创建测试用户?

编辑:我用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

Answer 1:

你记得做测试设置以下的地方?

request.env [ “omniauth.auth”] = OmniAuth.config.mock_auth [:微博]

如果你这样做,是有可能在用户的UID不匹配模拟UID?

你可以尝试改变从工厂定义sequence(:uid) { |n| "#{n}" } sequence(:uid) { |n| "#{n}" }uid '12345'



文章来源: Create users in Factory Girl with OmniAuth?