【问题标题】:How can I test key/value column during unit testing in Rails using rake test如何在 Rails 中使用 rake 测试进行单元测试期间测试键/值列
【发布时间】:2012-07-10 03:39:17
【问题描述】:

我有一个表 (Dishes),其中有一列 (nutrition_facts) 用于存储键/值数据(类似于 hstore in a PostgreSQL 数据库)。

我在我的fixtures文件夹中定义了一个新的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

如何在不测试整个 nutrition_facts 字段的情况下测试单个 caloriesserving_size 值?

简而言之,我正在尝试测试以下验证(来自我的 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? }

【问题讨论】:

  • 你是如何在你的模型中定义这个“键/值”的东西的?通过序列化?!
  • 是的,通过序列化。一旦我找到了这个关键字,我就可以在这个网站Fixtures and serialized attributes in Ruby on Rails 上找到解决方案。我将在几个小时内将解决方案作为正式答案发布。感谢您有兴趣帮助我。

标签: ruby-on-rails-3 unit-testing rake key-value


【解决方案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

Source: Fixtures and serialized attributes in Ruby on Rails

【讨论】:

    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    相关资源
    最近更新 更多