[英]rspec test fails code in rails controller
在我的application_controller.rb中,我有一行代码如下:
def index
CaseStatus.order(:application_source).pluck(:application_source).uniq!
end
在我的rspec代码中,我有一行代码可以访问application_controller的索引路径,如下所示
visit applications_path
当我直接运行代码时,它可以正常运行,但是当它通过rspec访问application_controller.rb时,出现错误提示
NoMethodError:
undefined method `compact' for nil:NilClass
我不确定是否通过rspec和capybara收到此错误,但是如果我将代码运行为
def index
CaseStatus.order(:application_source).pluck(:application_source)
end
它执行完美,没有错误。 Kinda弄糊涂了什么uniq!
中断代码,结果突然变成零。
我得到这个错误
Failure/Error: @application_channels = CaseStatus.order(:application_source).pluck(:application_source).uniq!.compact if CaseStatus.order(:application_source).present?
NoMethodError:
undefined method `compact' for nil:NilClass
# ./app/controllers/loan_applications_controller.rb:53:in `index'
我不认为uniq!
是您在这种情况下要使用的方法,请参见:
如果未进行任何更改(即未找到任何重复项),则返回nil。 https://ruby-doc.org/core-2.2.0/Array.html#method-i-uniq-21
所以它是这样的:
2.3.1 :008 > a = [1,2,3,3,nil].uniq!
=> [1, 2, 3, nil]
2.3.1 :009 > a = [1,2,3,nil].uniq!
=> nil
2.3.1 :010 >
另一方面, uniq
工作方式如下:
2.3.1 :010 > a = [1,2,3,3,nil].uniq
=> [1, 2, 3, nil]
2.3.1 :011 > a = [1,2,3,nil].uniq
=> [1, 2, 3, nil]
在uniq
的输出上,可以安全地运行compact
来删除nil
值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.