ruby-on-rails - 获取未定义的方法 `empty?' for nil :NilClass in my test suite when I try to call a Rails path helper (*_path) using Rails, Rspec

标签 ruby-on-rails ruby rspec rspec-rails

Rails 6.1.3.1 R规范

基本行为规范代码:

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 我也会得到相同的异常,所以问题只是在测试环境中使用助手

在开发环境中,此功能有效。

最佳答案

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

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

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

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

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

在这里,您将看到 Gem 中失败的行号的完整回溯。调试 Gems 时要小心 - 请记住撤消您所做的任何更改,并知道您在 Gem 代码中进行的猴子修补不会影响您的生产代码。

请注意,您可以运行 gem pristine <gem name>gem pristine --all撤消对本地安装的 gem 所做的任何更改。

关于ruby-on-rails - 获取未定义的方法 `empty?' for nil :NilClass in my test suite when I try to call a Rails path helper (*_path) using Rails, Rspec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67268351/

相关文章:

ruby-on-rails - 如何在window azure上使用LDAP?

ruby-on-rails - 跳过为 `rails generate controller` 创建测试、 Assets 和帮助程序的语法?

c++ - 在 C++ 应用程序中嵌入 Rake?还是有 LUA 的湖?

ruby-on-rails - 如何立即与 guard 和工厂女孩一起检查工厂?

ruby - 如何避免 RSpec 中的 "Useless use of == in void context"?

ruby-on-rails - 查看使用delayed_job运行的后台任务的输出

ruby-on-rails - 从应用程序中强行停止延迟的工作人员

ruby - 从外部方法跳过 Ruby 迭代器

ruby - Rspec检查是否调用了一个方法而不调用该方法

mysql - osx 10.6.8 上的 mysql gem 出现问题