ruby 未定义的方法`空?' for nil:当我尝试使用Rails、Rspec调用Rails路径帮助器(*_path)时,测试套件中的NilClass

niwlg2el  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(112)

Rails 6.1.3.1
基本行为规范代码:

describe "index" do
  it "should show me the list" do
    visit dashboard_targets_path
  end
end

字符串
路由文件

namespace :dashboard do
  resources :targets 
end


错误显示了异常,但奇怪的是,它似乎没有调用应用程序,只是在我的测试代码中失败了:

1) interaction for Dashboard::TargetsController index should show me the list
     Failure/Error: visit dashboard_targets_path
     
     NoMethodError:
       undefined method `empty?' for nil:NilClass
     # ./spec/system/dashboard/targets_behavior_spec.rb:16:in `block (3 levels) in <top (required)>'
     # /Users/jason/.rvm/gems/ruby-2.6.6/gems/webmock-3.12.2/lib/webmock/rspec.rb:37:in `block (2 levels) in <main>'
     # /Users/jason/.rvm/gems/ruby-2.6.6/gems/rspec-wait-0.0.9/lib/rspec/wait.rb:46:in `block (2 levels) in <main>'


它似乎在测试代码中失败了,如果我进入调试器并直接运行dashboard_targets_path,我也会得到同样的异常,所以问题只是在测试环境中使用助手****
在开发环境中,这个函数可以工作。

yfwxisqw

yfwxisqw1#

这里的问题是config/environments/test.rb文件确实有default_url_options

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

字符串
当您遇到消失在Rails gems中的错误时,调试它们的好方法如下:

begin
  // your failing code here
rescue StandardError => e
  puts e.backtrace
  byebug
  puts e.inspect
  raise (e)
end

  • 警告:除非您明确希望使用异常处理进行流控制,否则请勿将此代码留在应用中或将其签入(不推荐!)。建议仅用于调试目的。*

在这里,您将看到完整的回溯到 Gem 中失败的行号。在调试Gem时要小心--记住要撤消您所做的任何更改,并且要知道您在Gem代码中的猴子修补不会影响您的产品代码。
请注意,您可以运行gem pristine <gem name>gem pristine --all来撤消对本地安装的gem所做的任何更改。

相关问题