2011-07-19 12 views
0

注*私は確信しているが、現在ここにRuby on Rails 2.3.8:機能テスト:数値はパラメータとして文字列として渡されませんか?

を重要ならば、私はポストを行うための準備をするには、以下のか、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が文字列ではないことに注意してください。

これは、フィールドにチェック()があるため(これはオプションなので)、コントローラーが壊れてしまい、コントローラーのメソッドが全く異なる動作をします。 DEV /生産の

それは実際には同じ方法としては、動作しているときに、アプリで正常に動作し、コンソール出力する:1がそれているため、文字列がどのようにここに

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

お知らせフォームから来ており、HTTPではすべてが文字列です。

これは具体的には、失敗している私のコードでは何です:、現在

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

問題、それは数を渡しているため、テストでは、代わりに文字列表現を、私はエラーを取得していますということですundefined method empty? for #:Fixnum

だから私はこれを動作させることができるように(テストなど)コードを変更するにはどうすればよいですか?

+0

代わりに '.blank?'を使用するだけでなく、項目が 'nil'の場合はtrueを返し、空の文字列の場合はtrueを返します。 –

+0

文字列に.blank?がありません。しかし、それは同じ問題です。数字に.blankがありませんか?方法。 – NullVoxPopuli

答えて

0

Railsは.blank?の定義は非常に簡単です、それは何も(文字列、数値など)についてだけに働く意味、Object.blank?メソッドを定義します。

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

それはempty?を使用するようにデフォルト設定されますが、そのメソッドがオブジェクトに存在しない場合は、!selfを呼び出します。項目がnilの場合、!niltrueと評価されます。

+0

どのように機能しますか? "!"と! "text"は両方ともfalseを返すからです。私は2つの異なるものを返す必要があります。だから私は空白を使っている。 HTMLではすべてが文字列であるため、 ""はnilと同じであるとみなされなければなりません。 – NullVoxPopuli

+0

、例えば、4.empty?未定義のメソッドを返します。空白と同じです。 – NullVoxPopuli

+0

Railsでは '4.blank?'は未定義のメソッドではなく 'false'を返します。あなたのコントローラは実際には文字列か数字かどうかを気にしてはいけません。 'params [:template_id] .blank?'を呼び出すだけです。パラメータが存在しない場合、または空白の場合は 'true'を返します'0'や' '0 ''のときはfalseを返します。 –