gpt4 book ai didi

ruby-on-rails - 使用 OmniAuth 在 Factory Girl 中创建用户?

转载 作者:行者123 更新时间:2023-12-04 06:04:59 25 4
gpt4 key购买 nike

我目前正在创建一个使用 OmniAuth 来创建和验证用户的应用程序。由于 Factory Girl 在没有 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' }})

当前工厂.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

最佳答案

您是否记得在测试设置中的某处执行以下操作?

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

如果您这样做了,是否有可能用户的 UID 与模拟 uid 不匹配?

您可以尝试从 sequence(:uid) { |n| "#{n}" } 更改工厂定义至 uid '12345' .

关于ruby-on-rails - 使用 OmniAuth 在 Factory Girl 中创建用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11388100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com