Ruby on rails 设计+;RSpec:如何对用户进行身份验证?
我正在使用Ruby on rails 设计+;RSpec:如何对用户进行身份验证?,ruby-on-rails,rspec,devise,Ruby On Rails,Rspec,Devise,我正在使用designe进行会员身份验证。 我需要测试一个成员的登录场景登录(成员)不检查身份验证信息-它只是登录成员,这就是我使用身份验证成员的原因中建议的身份验证方法 但是我得到一个异常,说ArgumentError:uncaughtthrow:warden #spec/features/member.rb FactoryGirl.define do factory :member do email "john@gm
designe
进行会员身份验证。
我需要测试一个成员的登录场景<代码>登录(成员)不检查身份验证信息-它只是登录成员,这就是我使用身份验证成员的原因代码>中建议的身份验证方法
但是我得到一个异常,说ArgumentError:uncaughtthrow:warden
#spec/features/member.rb
FactoryGirl.define do
factory :member do
email "john@gmail.com"
password "12345678"
firstname "John"
lastname "Doe"
location "United States"
end
end
#spec/controllers/sessions_spec.rb
it "authenticate member" do
create(:member)
@request.env["devise.mapping"] = Devise.mappings[:member]
@request.env["warden"] = warden
controller.allow_params_authentication!
expect(controller.authenticate_member!(:scope => :member, :force => true)).not_to be nil
end
我还尝试为(:member)
设置controller.resource=FactoryGirl.attributes\u,认为资源未设置,但随后得到异常作为
NoMethodError:protected方法'resource='为#
如何解决此问题?我在Deviate上发布了一个关于此问题的github问题:
建议我使用post
来创建sessions
,以模拟登录表单中的post请求
以下是替代解决方案:
#spec/controllers/sessions_spec.rb
it "authenticate member" do
create(:member)
@request.env["devise.mapping"] = Devise.mappings[:member]
@request.env["warden"] = warden
## Added post request to "create"
post :create, :member => FactoryGirl.attributes_for(:member)
## Added new expectations
expect(controller.member_signed_in?).to be true
expect(controller.current_member.email).to eq "john@gmail.com"
## "session["warden.user.member.key"][0].first" stores the "id" of logged in member
## Replace "member" in "session["warden.user.member.key"][0].first" with your
## devise model name. For example: If your devise model name is customer then you
## need to check "session["warden.user.customer.key"][0].first"
expect(session["warden.user.member.key"][0].first).to eq member.id
end
注意:
我想得到一个解释,解释一下为什么我之前的代码(如有问题的建议和中的design team
所提供的代码)没有计算出应该包含哪些代码。如果有人发现我以前的会员身份验证代码不起作用的原因,请随时发布新的答案 你找到解决办法了吗?如果是-请随意添加它作为答案(以便其他人可以从您的经验中学习):@TarynEast谢谢您的提醒。:)我没有找到一个适当的解释,但我找到了一个替代方案,我张贴的参考。