Ruby on rails Rspec控制器测试通过nil而不是@user object I';我派

Ruby on rails Rspec控制器测试通过nil而不是@user object I';我派,ruby-on-rails,rspec,devise,Ruby On Rails,Rspec,Devise,业主\配置文件\控制器\规范rb it 'assigns the profile as @profile' do profile = FactoryGirl.create(:employer_profile, :user_id => @user) get :show, :user_id => @user assigns(:employer_profile).should eq(profile) end route.rb get '/employer_profiles

业主\配置文件\控制器\规范rb

 it 'assigns the profile as @profile' do
  profile = FactoryGirl.create(:employer_profile, :user_id => @user)
  get :show, :user_id => @user 
  assigns(:employer_profile).should eq(profile)
end
route.rb

get '/employer_profiles/:user_id', to: 'employer_profiles#show'
我正在规范中登录
@user
,其中的designe宏
login\u user
位于

module ControllerMacros
 def login_user
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:user]
      user = FactoryGirl.create(:user)
      sign_in user
    end
  end
end
最后是错误

Failure/Error: get :show, :user_id => @user
 ActionController::UrlGenerationError:
   No route matches {:user_id=>nil, :controller=>"employer_profiles", :action=>"show"}
 # ./spec/controllers/employer_profiles_controller_spec.rb:15:in `block (3 levels) in     <top (required)>'
失败/错误:get:show,:user\u id=>@user
ActionController::UrlGenerationError:
没有路由匹配{:user\u id=>nil,:controller=>employer\u profiles,:action=>“show”}
#./spec/controllers/employer\u profiles\u controller\u spec.rb:15:in‘block(3级)in’

首先,您在任何地方都定义了
@user
。所以,在helper中定义它

def login_user
  before(:each) do
    @request.env["devise.mapping"] = Devise.mappings[:user]
    @user = FactoryGirl.create(:user)
    sign_in @user
  end
end 
那么
get
的param参数应该在散列中

而不是

get :show, :user_id => @user 
你需要

get :show, {:user_id => @user.id} 

应该user=FactoryGirl.create(:user)是@user=FactoryGirl.create(:user)在before(:each)中吗?我在
FactoryGirl.create(:employer\u profile,:user\u id=>:user)中得到一个未定义的var
user
所以显然@user是为第一个create()定义的,我不得不更改
profile=FactoryGirl.create(:employer\u profile,:user\u id=>@user)
profile=FactoryGirl。创建(:employer\u profile,:user=>@user)
也一样,但修复也是必要的,谢谢!