Ruby on rails Rspec控制器测试通过nil而不是@user object I';我派
业主\配置文件\控制器\规范rbRuby 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
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)中得到一个未定义的varuser
所以显然@user是为第一个create()定义的,我不得不更改profile=FactoryGirl.create(:employer\u profile,:user\u id=>@user)
到profile=FactoryGirl。创建(:employer\u profile,:user=>@user)
也一样,但修复也是必要的,谢谢!