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谢谢您的提醒。:)我没有找到一个适当的解释,但我找到了一个替代方案,我张贴的参考。