Ruby on rails 运行Capybara测试时未定义的方法“map”

Ruby on rails 运行Capybara测试时未定义的方法“map”,ruby-on-rails,ruby-on-rails-5,capybara,Ruby On Rails,Ruby On Rails 5,Capybara,我正在使用Capybara运行功能测试,但不断出现以下错误: Failure/Error: select(@architect2.name, from: 'architect') NoMethodError: undefined method `map' for nil:NilClass Did you mean? tap # ./spec/features/reassign_team_spec.rb:30:in `block (2 levels) in <top (

我正在使用Capybara运行功能测试,但不断出现以下错误:

 Failure/Error: select(@architect2.name, from: 'architect')

 NoMethodError:
   undefined method `map' for nil:NilClass
   Did you mean?  tap
 # ./spec/features/reassign_team_spec.rb:30:in `block (2 levels) in <top (required)>'
 # ./spec/support/database_cleaner_spec.rb:58:in `block (2 levels) in <top (required)>'
 # ./spec/support/database_cleaner_spec.rb:39:in `block (2 levels) in <top (required)>'
 # /home/user/.rvm/gems/ruby-2.3.3/gems/rspec-retry-0.6.1/lib/rspec/retry.rb:123:in `block in run'
 # /home/user/.rvm/gems/ruby-2.3.3/gems/rspec-retry-0.6.1/lib/rspec/retry.rb:110:in `loop'
 # /home/user/.rvm/gems/ruby-2.3.3/gems/rspec-retry-0.6.1/lib/rspec/retry.rb:110:in `run'
 # /home/user/.rvm/gems/ruby-2.3.3/gems/rspec-retry-0.6.1/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry'
 # /home/user/.rvm/gems/ruby-2.3.3/gems/rspec-retry-0.6.1/lib/rspec/retry.rb:37:in `block (2 levels) in setup'
视图中的代码是:

<%= select_tag :architect, options_for_select(User.is_architect.collect{ |u| [u.name, u.id] }, params[:architect]), {:prompt => 'All', :class => "form-control", :required => true } %>
<%= select_tag :supervisor, options_for_select(User.is_supervisor.collect{ |u| [u.name, u.id] }, params[:supervisor]), prompt: 'All', class: "form-control" %>

手动测试时,一切正常。我在这里遗漏了什么?

您是否尝试清理资产 这将是有益的,如果你已经改变了前端的东西 它将清理您的资产并从一开始就编译它们。 这可能会有帮助 rake资产:清洁 rake资产:clobber
rake assets:precompile

我也有同样的问题,结果是我包括了干扰事物的ActionView::TestCase::Behavior。我可以通过在select语句中添加一个页面限定符来解决这个问题,即page.select@architect2.name,from:'architect'

事实证明,对于这个特定的测试,我甚至不需要ActionView::TestCase::Behavior,一旦我删除了它,我就可以删除页面了。一切都很好


因此,可能值得回顾包含的模块,并添加页面。限定符,以确保其他内容不会妨碍您。

请将错误的堆栈跟踪添加到您的Question,以便我们可以查看错误实际发生的位置from@ThomasWalpole添加堆栈跟踪:假设重新分配团队规格。rb:30为select@architect2.name,从:“架构师”开始,然后您需要启用更详细的回溯,这样我就可以看到Capybara中的哪一行或任何调用错误的内容。实际上,每当前端发生更改时,我们需要重新编译整个前端,如果我们不这样做,那么前端将永远不会接受这些更改,并将依赖以前的更改前端。我找不到不必要的模块,但页面限定符起作用了!非常感谢,很高兴我能帮助@Zavitoski!
<%= select_tag :architect, options_for_select(User.is_architect.collect{ |u| [u.name, u.id] }, params[:architect]), {:prompt => 'All', :class => "form-control", :required => true } %>
<%= select_tag :supervisor, options_for_select(User.is_supervisor.collect{ |u| [u.name, u.id] }, params[:supervisor]), prompt: 'All', class: "form-control" %>
[1] pry(#<RSpec::ExampleGroups::ReassignTeams>)> select(@architect2.name,from: 'architect')
NoMethodError: undefined method `map' for nil:NilClass
Did you mean?  tap
from /home/user/.rvm/gems/ruby-2.3.3/gems/actionview-5.2.3/lib/action_view/helpers/form_options_helper.rb:364:in `options_for_select'