最近工作中遇到了个问题,写测试代码时发现的。
控制器内:
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? 结果不是一样的?