Ruby on Rails 2.3.8:功能测试:数字没有在params中作为字符串传递?

时间:2011-07-19 18:34:37

标签: ruby-on-rails ruby

注意*我正在使用Factory_girl,不确定这是否重要

目前,我执行以下操作准备发布帖子:

  p = Factory.build(:le_object, :template_id => t.id.to_s)

请注意,我故意将其转换为字符串

然后我就做你的普通帖子了:

  post :create, :le_object => p.attributes

但是,可疑的是,当我查看测试日志时,我看到了这一点:

Parameters: {"action"=>"create", ... "template_id"=>0, ... }

注意id不是字符串。

现在,这会弄乱控制器,因为我对该字段进行not .empty?检查(因为它是可选的),然后控制器中的那个方法完全不同。

这在应用程序中工作正常,当它实际运行时,对于相同的方法,控制台在dev / production中输出:

Parameters: {"action"=>"create", ... "template_id"=>"1"...}

注意这里1是一个字符串,因为它来自一个表单,而在HTTP中,一切都是字符串。

这是我的代码失败的原因,具体而言:

if not params[:le_object][:template_id].nil? and not params[:le_object][:template_id].empty?

目前的问题是,在测试中,因为它传递了一个数字,而不是字符串表示,我收到错误undefined method empty? for #:Fixnum

那么......我如何更改我的代码(测试或其他方式)以便我可以使用它?

1 个答案:

答案 0 :(得分:0)

Rails在.blank?上定义了Object方法,这意味着它适用于任何事物(字符串,数字等)。.blank?的定义非常简单:

respond_to?(:empty?) ? empty? : !self

默认使用empty?,但如果该对象上不存在该方法,则只会调用!self。如果该项目为nil,则!nil将评估为true