如何使factory_girl暂时与关联工作?

时间:2016-03-11 13:58:51

标签: ruby-on-rails rspec factory-bot rspec-rails

以前我的工厂看起来像这样:

FactoryGirl.define do
  factory :file do
    ignore do
      attachment_id 1
    end

    trait :file_with_autoplay do
      type_key "file_with_autoplay"
      attrs {{
        "path" => attachment_id,
        "volume" => 1
      }}
    end
  end
end

当我使用

建造工厂时
create(:file, :file_with_autoplay, { story: story, attachment_id: attachment.id } )

它工作正常。

现在我必须稍微重构一下模型。在Story Filetype_keyattrs之前。现在File具有一对一模型Config,我在其中提取type_keyattrs

所以,我的工厂看起来像这样:

FactoryGirl.define do
  factory :file do
    ignore do
      attachment_id nil
    end

    trait :file_with_autoplay do
      association :config,
        configuration_type: "file",
        type_key: "file_with_autoplay",
        attrs: {
          "path" => "#{attachment_id}",
          "volume" => 1
        }
    end
  end
end

所以,没有太大的改变,但我现在将attachment_id传递给协会。 当我运行测试时,我得到了

ArgumentError:
   Trait not registered: attachment_id

为清楚起见,这是我的新config工厂:

FactoryGirl.define do
  factory :config do
    ignore do
      attachment_id nil
    end
    configuration_type "file"
    type_key "file_with_autoplay"
    attrs {{
      "generic_attr" => "generic_value"
    }}
  end
end

我在这里做错了什么?我应该如何通过Factory Girl中的关联传递attachment_id瞬态?

0 个答案:

没有答案