0

まず、この質問は以前の質問と少し似ていますが、新しいスレッドを開始するには十分に異なると感じました。モデルの検証をテストしようとすると、問題が発生します。フィールド :default_price を必要とするユーザー モデルがあります。私のテストは次のとおりです。

it "should require default packs" do
  User.new(FactoryGirl.build(:user, :default_packs => " ")).should_not be_valid
end

ただし、テストを実行すると、次のエラーが発生します。

 Failure/Error: should_not be_valid
 TypeError:
   nil can't be coerced into Fixnum
 # ./app/models/user.rb:62:in `*'
 # ./app/models/user.rb:62:in `daily_saving_potential_cents'
 # ./spec/models/user_spec.rb:155:in `block (2 levels) in <top (required)>'

Daily_Saving_potential_cents は次のように定義されます。

  def daily_saving_potential_cents
    return default_price_cents * default_packs
  end

default_price_centsは単にモンテライズされたバージョンでありdefault_price、default_packs は私のモデルの別のフィールドです。この問題は、default_price_cents が空白の場合、これら 2 つを掛け合わせることができないという事実から生じますが、テストでこれを修正するにはどうすればよいですか? 私の検証により、default_price_cents が空白になることはありませんが、それに対してテストしている場合は空白になります。

4

3 に答える 3

0

コードから、ユーザー オブジェクト パラメータを User.new に渡します。私はあなたが使うべきだと思う

User.new(FactoryGirl.attributes_for(:user, :default_packs => " "))

試してみてください。

于 2014-06-05T13:49:29.373 に答える
0

この問題の理由は、nil を使用した整数の算術演算です。

1 + nil
1 * nil
など

2 番目の引数が nil かどうかをチェックするだけで処理できます。

于 2014-12-05T18:19:35.110 に答える
0

以下を使用して、新しいモデル定義の検証も確実にすることでこれを解決しました。

  def daily_saving_potential_cents
    unless default_price_cents.nil? && default_packs.nil?
      return default_price_cents * default_packs
    end
  end
于 2014-06-05T14:00:56.470 に答える