【问题标题】:How to create a fixture ActsAsTaggableOn with FactoryGirl?如何使用 FactoryGirl 创建夹具 ActsAsTaggableOn?
【发布时间】:2012-03-03 09:27:44
【问题描述】:

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

我试过了:

/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

感谢您的帮助, 文森特

【问题讨论】:

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


    【解决方案1】:

    我猜你使用的是相当旧的工厂女孩​​版本。如果可以的话,我鼓励您切换到最新版本。

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

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

    查看 Factory 1.3 文档 here。但正如我之前告诉你的那样。尝试切换到较新的版本。

    【讨论】:

      【解决方案2】:

      这就是我将标签(使用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)
      

      但是当我想创建一个带有poetry 标记的Post 时,我会写:

      post = create(:post, :poetry)
      

      而且效果很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        • 2011-09-03
        • 2012-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多