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 和水豚得到这个错误但是如果我 运行 代码为
def index
CaseStatus.order(:application_source).pluck(:application_source)
end
它执行完美,没有错误。有点困惑 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!
不是您希望在这种情况下使用的方法,请参阅:
Returns nil if no changes are made (that is, no duplicates are found).
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
值是安全的。
在我的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 和水豚得到这个错误但是如果我 运行 代码为
def index
CaseStatus.order(:application_source).pluck(:application_source)
end
它执行完美,没有错误。有点困惑 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!
不是您希望在这种情况下使用的方法,请参阅:
Returns nil if no changes are made (that is, no duplicates are found). 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
值是安全的。