最近工作中遇到了个问题,写测试代码时发现的。
控制器内:
class AnysController < ApplicationController
before_filter :require_admin
def index
if params[:type] then
@anys = Any.list_by_type(params[:type])
else
@anys= Any.all
end
end
end
测试代码:
# it is not true
Any.create(type: 1)
Any.create(type: 2)
Any.create(type: 4)
assert_equal Any.all.count, 3
get 'index', :format => :json, :type => 1
retval = JSON.parse(@response.body)
assert_equal retval.count, 1
在运行测试时,会在底下一行遇到错误,实际上retval.count=3的,也就是程序走的是else语句的部分。但只要把控制器内的params[:type]修改一下,则不会出现此错误。
if !params[:type].nil? then
...
这是为什么呢?
ruby内不是说除了nil和false都是 true 吗? 作为条件时,params[:type] 和!params[:type].nil? 结果不是一样的?