运行 水豚测试时未定义的方法 `map'
Undefined method `map' while running Capybara test
我正在 运行 使用 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'
测试是:
click_button('Switch')
select(@architect2.name, from: 'architect')
select(@supervisor2.name, from: 'supervisor')
而视图中的代码是:
<%= 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" %>
使用 pry 我可以检查 User.is_architect
列表是否存在。尝试执行 select 命令会抛出这个:
[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'
手动测试时一切正常。我在这里错过了什么?
您尝试过清理资产吗
如果您在前端更改了某些内容,这将很有帮助
它将清除您的资产并从头开始编译它们。
这可能有帮助
耙子 assets:clean
耙子 assets:clobber
耙子 assets:precompile
我遇到了同样的问题,结果发现我包含了 ActionView::TestCase::Behavior
这会干扰事情。我可以通过在 select
语句中添加 page
限定符来解决这个问题,即 page.select @architect2.name, from: 'architect'
.
事实证明我什至不需要 ActionView::TestCase::Behavior
来进行这个特定的测试,一旦我删除它我就可以删除 page.
并且一切都很好。
因此,可能值得检查包含的模块,并添加 page.
限定符以确保没有其他东西妨碍。
我正在 运行 使用 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'
测试是:
click_button('Switch')
select(@architect2.name, from: 'architect')
select(@supervisor2.name, from: 'supervisor')
而视图中的代码是:
<%= 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" %>
使用 pry 我可以检查 User.is_architect
列表是否存在。尝试执行 select 命令会抛出这个:
[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'
手动测试时一切正常。我在这里错过了什么?
您尝试过清理资产吗
如果您在前端更改了某些内容,这将很有帮助
它将清除您的资产并从头开始编译它们。
这可能有帮助
耙子 assets:clean
耙子 assets:clobber
耙子 assets:precompile
我遇到了同样的问题,结果发现我包含了 ActionView::TestCase::Behavior
这会干扰事情。我可以通过在 select
语句中添加 page
限定符来解决这个问题,即 page.select @architect2.name, from: 'architect'
.
事实证明我什至不需要 ActionView::TestCase::Behavior
来进行这个特定的测试,一旦我删除它我就可以删除 page.
并且一切都很好。
因此,可能值得检查包含的模块,并添加 page.
限定符以确保没有其他东西妨碍。