【问题标题】:Fixtures ignores my model relation夹具忽略了我的模型关系
【发布时间】:2014-03-09 09:54:22
【问题描述】:

我要离开 RSpec 并开始使用 Test::Unit 和 Fixtures。 请问,我的关系怎么了?

我有关系

def class InputSet < ActiveRecord::Base
  has_many :input_units
end

input_set_test.rb

require 'test_helper'

class InputSetTest < ActiveSupport::TestCase
  test 'fixture is valid' do
    input_set = input_sets(:one)
    assert input_set.valid?
  end
end

夹具:

# input_sets.yml
one:
  name: 'Kalkulacia 1'
  input_units: product_1    <<<------- this is causing the problem

# input_units.yml
product_1:
  data: {val1: 'test', val2: 'test'}
  kind: 'product'

我运行rake test 并看到错误:

1) Error:
InputSetTest#test_fixture_is_valid:
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  column "input_units" of relation "input_sets" does not exist
LINE 1: INSERT INTO "input_sets" ("name", "input_units", "created_at...
                                      ^
: INSERT INTO "input_sets" ("name", "input_units", "created_at", "updated_at", "id") VALUES ('Kalkulacia 1', 'product_1', '2014-03-09 09:43:40', '2014-03-09 09:43:40', 980190962)

【问题讨论】:

  • 试试input_units: [product_1]
  • 为什么不使用工厂而不是固定装置?
  • @astropanic 我想使用内置功能。这就是 Test::Unit 和 Fixtures 的原因。顺便说一句,我知道 Factory Girl,它更复杂,但我想要更简单的工具。
  • 我明白,我也不喜欢安装大量的 gem,但简单并不总是一个好方法。也许现在由于反序列化 YAML 文件等,夹具更简单......但是当您的项目增长时,随着测试的发展,您的夹具变得无法维护,您最终会出现代码重复,这很容易出错并带来巨大的技术债务.而且因为例如 FactoryGirl 不是内置的,这并不意味着它是一个糟糕的工具。

标签: ruby-on-rails ruby unit-testing fixtures


【解决方案1】:

我刚刚遇到了同样的问题。您可能需要在InputUnit 模型中添加对应关系:

# input_unit.rb
class InputUnit < ActiveRecord::Base
  belongs_to :input_unit_set
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多