Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 具有多态配置文件的Desive用户的测试_Ruby On Rails_Ruby_Testing - Fatal编程技术网

Ruby on rails 具有多态配置文件的Desive用户的测试

Ruby on rails 具有多态配置文件的Desive用户的测试,ruby-on-rails,ruby,testing,Ruby On Rails,Ruby,Testing,我的应用程序有一个用户模型,它属于:profile,:polymorphic=>true。此配置文件可以是学生、经理、企业或员工,需要管理员批准才能登录系统。我用过这个 我的测试部分有点问题。它总是输出: 1) Error: test_should_get_dashboard(ManagersControllerTest): NoMethodError: undefined method `approved' for nil:NilClass 可能相关来源: class User < A

我的应用程序有一个
用户
模型,它
属于:profile,:polymorphic=>true
。此配置文件可以是
学生
经理
企业
员工
,需要管理员批准才能登录系统。我用过这个

我的测试部分有点问题。它总是输出:

1) Error:
test_should_get_dashboard(ManagersControllerTest):
NoMethodError: undefined method `approved' for nil:NilClass
可能相关来源:

class User < ActiveRecord::Base
   belongs_to :profile, :polymorphic => true
   attr_accessible :approved
end

class ManagersControllerTest < ActionController::TestCase
  include Devise::TestHelpers
  fixtures :managers
  fixtures :users

  def setup
    manager = Manager.create(:name => 'Manager', :cpf => '537.846.919-86')
    @user = User.new(:email => 'user@user.com', :password => 'user@user.com')
    @user.approved = true
    @user.profile = manager
    @user.save!
  end

  test "should get dashboard" do
    sign_in @user
    get :dashboard
    assert_response :redirect
    assert_redirected_to managers_root_path
  end
end

class ManagersController < ApplicationController
  def dashboard
    p = Proc.new { |e| [e.name, e.id] if e.user.approved }
    app_en = Enterprise.all.map(&p).compact.count
    napp_en = Enterprise.count - app_en

    app_em = Employee.all.map(&p).compact.count
    napp_em = Employee.count - app_em

    @app = [ app_en, app_em, 0 ]
    @napp = [ napp_en, napp_em, 0 ]
    @total = [ app_en + napp_en, app_em + napp_em, Student.count ]

    tags_count = Activity.tag_counts.map(&:count)
    @tags = Hash[Activity.tag_counts.map(&:name).zip(tags_count)]

    @user = current_user
   end
end
class用户true
属性:已批准
结束
类ManagersControllerTestmanager',:cpf=>537.846.919-86')
@user=user.new(:email=>'user@user.com“,:password=>”user@user.com')
@user.approved=true
@user.profile=manager
@user.save!
结束
测试“应该得到仪表板”吗
在@user中登录
获取:仪表板
assert\u响应:重定向
断言\u已将\u重定向到管理器\u根\u路径
结束
结束
类ManagersController
由于我对所写的fixture有问题,我忽略了它们,但是如果有人给出fixture的解决方案,我会非常感激。即使这样,我也陷入了这个错误。我该怎么办


堆栈

/home/waldyr/Dropbox/Workspace/Rails/bancodevagas/app/controllers/managers_controller.rb:7:in `block in dashboard'
/home/waldyr/Dropbox/Workspace/Rails/bancodevagas/app/controllers/managers_controller.rb:8:in `map'
/home/waldyr/Dropbox/Workspace/Rails/bancodevagas/app/controllers/managers_controller.rb:8:in `dashboard'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action_controller/metal/implicit_render.rb:4:in `send_action'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/abstract_controller/base.rb:167:in `process_action'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action_controller/metal/rendering.rb:10:in `process_action'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/abstract_controller/callbacks.rb:18:in `block in process_action'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:425:in `_run__2212830968385571096__process_action__4077155092621945467__callbacks'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:405:in `__run_callback'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:81:in `run_callbacks'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/abstract_controller/callbacks.rb:17:in `process_action'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action_controller/metal/rescue.rb:29:in `process_action'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active_support/notifications.rb:123:in `block in instrument'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active_support/notifications.rb:123:in `instrument'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action_controller/metal/instrumentation.rb:29:in `process_action'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action_controller/metal/params_wrapper.rb:206:in `process_action'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.6/lib/active_record/railties/controller_runtime.rb:18:in `process_action'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/abstract_controller/base.rb:121:in `process'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/abstract_controller/rendering.rb:45:in `process'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action_controller/metal/testing.rb:17:in `process_with_new_base_test'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action_controller/test_case.rb:469:in `process'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action_controller/test_case.rb:49:in `process'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/devise-2.1.2/lib/devise/test_helpers.rb:19:in `block in process'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/devise-2.1.2/lib/devise/test_helpers.rb:71:in `catch'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/devise-2.1.2/lib/devise/test_helpers.rb:71:in `_catch_warden'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/devise-2.1.2/lib/devise/test_helpers.rb:19:in `process'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action_controller/test_case.rb:386:in `get'
/home/waldyr/Dropbox/Workspace/Rails/bancodevagas/test/functional/manager_controller_test.rb:24:in `block in <class:ManagersControllerTest>'
/home/waldyr/Dropbox/Workspace/Rails/bancodevagas/app/controllers/managers\u controller.rb:7:在“仪表板中的块”中
/home/waldyr/Dropbox/Workspace/Rails/bancodevagas/app/controllers/managers\u controller.rb:8:in'map'
/home/waldyr/Dropbox/Workspace/Rails/bancodevagas/app/controllers/managers\u controller.rb:8:in'dashboard'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action\u controller/metal/implicit\u render.rb:4:在“发送动作”中
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/abstract\u controller/base.rb:167:进程中的动作
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action\u controller/metal/rendering.rb:10:进程中的动作
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/abstract\u controller/callbacks.rb:18:在“进程中的块”中
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active\u support/callbacks.rb:425:in`_run\u 221283096858571096\u进程\u操作\u 4077155092621945467\u回调'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active\u support/callbacks.rb:405:在“运行”回调中
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active\u support/callbacks.rb:385:in``运行\进程\操作\回调'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active\u support/callbacks.rb:81:in'run\u callbacks'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/abstract\u controller/callbacks.rb:17:进程中的动作
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action\u controller/metal/rescue.rb:29:正在进行中
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action\u controller/metal/instrumentation.rb:30:在“过程中的块”中
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active\u support/notifications.rb:123:在“仪器中的块”中
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active\u support/notifications/instrumenter.rb:20:in'instrument'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.6/lib/active_-support/notifications.rb:123:in'instrument'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action\u controller/metal/instrumentation.rb:29:进程中的动作
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action\u controller/metal/params\u wrapper.rb:206:进程中的动作
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.6/lib/active\u record/railties/controller\u runtime.rb:18:“进程中的动作”
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/abstract\u controller/base.rb:121:正在进行中
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/abstract\u controller/rendering.rb:45:正在进行中
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action\u controller/metal/testing.rb:17:正在进行中的新的基础测试
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action\u controller/test\u case.rb:469:在“过程”中
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action\u controller/test\u case.rb:49:在“过程”中
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/designe-2.1.2/lib/designe/test_helpers.rb:19:in“进程中的块”
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/designe-2.1.2/lib/designe/test_helpers.rb:71:in'catch'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/designe-2.1.2/lib/designe/test\u helpers.rb:71:in `\u catch\u warden'
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/designe-2.1.2/lib/designe/test_helpers.rb:19:正在进行中
/home/waldyr/.rvm/gems/ruby-1.9.2-p320/gems/actionpack-3.2.6/lib/action\u controller/test\u case.rb:386:in'get'
/home/waldyr/Dropbox/Workspace/Rails/bancodevagas/test/functional/manager\u controller\u test.rb:24:in'block in'

答案似乎是并非所有企业或员工模型都有关联的用户。当使用map to
e.user.approved
时,控制器尝试将
.approved
传递给
用户
,在这种情况下,该用户可以是
nil

一个简单的s
p = Proc.new { |e| [e.name, e.id] if e.user && e.user.approved }