[英]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.