如何使用FactoryGirl创建夹具ActsAsTaggableOn?

时间:2012-03-03 09:27:44

标签: ruby-on-rails rspec factory-bot acts-as-taggable-on

如何为ActsAsTaggableOn::tag使用FactoryGirl创建灯具?

我试过了:

/spec/factories/tags.rb

Factory.define ActsAsTaggableOn::Tag do |f|
  f.sequence(:name) { |n| "titre#{n}" }
end

/spec/controllers/books_controller.rb

it "should return 2 categories whith books" do

      fake_tag = Factory(:tag)
...

end

我明白了:

Failure/Error: fake_tag = Factory(:tag)
     ArgumentError:
       Factory not registered: tag

感谢您的帮助, 文森特

2 个答案:

答案 0 :(得分:9)

我猜你正在使用一个很老的工厂女孩​​版本。如果你能够,我建议你切换到最新版本。

回答你的问题,我认为你需要这样的话:

Factory.define :tag, :class => ActsAsTaggableOn::Tag do |f|
  f.sequence(:name) { |n| "titre#{n}" }
end

检查Factory 1.3 doc here。但正如我之前告诉你的那样。尝试切换到更新的版本。

答案 1 :(得分:7)

这是我向用户模型添加标签(使用acts-as-taggable-on)的方法(使用factory_girl):

FactoryGirl.define do 
  factory :post do 
    ...
    trait :poetry do
      after(:create) { |post| post.update_attributes(tag_list: 'poetry') }
    end
  end
end

这样,当我想创建一个普通的Post对象时,我写道:

post = create(:post)

但是当我想创建一个标有Post的{​​{1}}时,我写道:

poetry

它运作良好。