我目前正在创建一个使用OmniAuth创建和验证用户身份的应用程序。我在测试期间遇到问题,因为Factory Girl无法在没有OmniAuth的情况下生成用户。
我有几种不同的方法让工厂女孩用omniauth创建用户,但没有一个成功。
我已将以下两行添加到spec_helper文件
OmniAuth.config.test_mode = true \\ allows me to fake signins
OmniAuth.config.add_mock(:twitter, { :uid => '12345', :info => { :nickname => 'Joe Blow' }})
current 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
我应该如何更改工厂/测试以使Factory Girl使用OmniAuth创建测试用户?
编辑:我使用了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
希望也很有用
#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 :(得分:2)
您是否还记得在测试设置中的某处执行以下操作?
request.env [“omniauth.auth”] = OmniAuth.config.mock_auth [:twitter]
如果你这样做,那么用户的UID是否可能与mock uid不匹配?
您可以尝试将工厂定义从sequence(:uid) { |n| "#{n}" }
更改为uid '12345'
。