簡體   English   中英

rspec測試在Rails控制器中失敗

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM