1

キー/値データを格納Dishesする列 ( ) を持つテーブル ( ) があります ( PostgreSQLデータベースと同様)。nutrition_factshstore

次のように、フィクスチャ フォルダーに Dish の新しいインスタンスを定義しました。

nutrition_facts:
  id: 6
  name: Dish 6
  category: Cat 1
  description: Something about Dish 6
  price: 15.32
  menu_id: 1
  nutrition_facts:
    serving_size:
    calories: 392

しかし、実行時に次のアサーションを機能させることができないようですrake test:units-最初に失敗しますassert_not_nil

  test "no serving size with calories" do
    dish = dishes(:nutrition_facts)

    assert_not_nil(dish.calories)
    assert_nil(dish.serving_size)
    assert !dish.save, "Saved dish when serving size wasn't defined while calories was"
  end

フィールド全体をテストせずに、個人caloriesと値をテストするにはどうすればよいですか?serving_sizenutrition_facts

dish.rbつまり、ブラウザーでアプリケーションを実行すると機能する次の検証 (ファイルから) をテストしようとしています。

  # Check 'serving size' isn't blank only if 'calories' is defined
  validates_presence_of :serving_size, :if => Proc.new { |val| !val.calories.blank? }
4

1 に答える 1

1

Nutrition_facts 列のキー/値を次のように定義することで、機能させることができました。

nutrition_facts: <%= {:serving_size => nil, :calories => 33}.to_yaml.inspect %>

したがって、私の備品では、次のようになります。

nutrition_facts:
  id: 6
  name: Dish 6
  category: Cat 1
  description: Something about Dish 6
  price: 15.32
  menu_id: 1
  nutrition_facts: <%= {:serving_size => nil, :calories => 33}.to_yaml.inspect %>

私の単体テストでは、次のようになります。

  test "no serving size with calories" do
    dish = dishes(:nutrition_facts)

    assert_not_nil(dish.calories)
    assert_nil(dish.serving_size)
    assert !dish.save, "Saved dish when serving size wasn't defined while calories was"
  end

出典: Ruby on Rails のフィクスチャとシリアライズされた属性

于 2012-07-10T21:51:31.513 に答える