如何使用FactoryGirl创建夹具ActsAsTaggableOn?

vda*_*bry 7 rspec ruby-on-rails acts-as-taggable-on factory-bot

如何使用FactoryGirl 为ActsAsTaggableOn :: tag创建一个夹具?

我试过了 :

/spec/factories/tags.rb

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

/spec/controllers/books_controller.rb

it "should return 2 categories whith books" do

      fake_tag = Factory(:tag)
...

end
Run Code Online (Sandbox Code Playgroud)

我明白了:

Failure/Error: fake_tag = Factory(:tag)
     ArgumentError:
       Factory not registered: tag
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助,文森特

Fra*_*ran 10

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

回答你的问题,我想你需要这样的东西:

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

此处查看Factory 1.3文档.但正如我之前告诉你的那样.尝试切换到更新的版本.


Paw*_*cki 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
Run Code Online (Sandbox Code Playgroud)

这样,当我想创建一个常规Post对象时,我写道:

post = create(:post)
Run Code Online (Sandbox Code Playgroud)

但是当我想创建一个Post标记的时候poetry,我写道:

post = create(:post, :poetry)
Run Code Online (Sandbox Code Playgroud)

它运作得很好.