2012-03-03 13 views
7

Làm cách nào để tạo một vật cố định cho ActsAsTaggableOn::tag Sử dụng FactoryGirl?Làm thế nào để tạo một vật cố định ActsAsTaggableOn với FactoryGirl?

tôi đã cố gắng:

/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 

tôi nhận được:

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

Cảm ơn sự giúp đỡ của bạn, Vincent

Trả lời

9

Tôi đoán bạn đang sử dụng phiên bản cũ của cô gái nhà máy. Tôi khuyến khích bạn chuyển sang phiên bản mới nhất nếu bạn có thể.

trả lời bạn câu hỏi, tôi nghĩ rằng bạn cần một cái gì đó như:

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

Kiểm tra Factory 1.3 doc here. Nhưng như tôi đã nói với bạn trước đây. Hãy thử chuyển sang phiên bản mới hơn.

7

Đây là cách tôi thêm thẻ (sử dụng acts-as-taggable-on) để mô hình của tôi sử dụng (sử dụng factory_girl):

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

Bằng cách này khi tôi muốn tạo ra chỉ là một đối tượng thường xuyên Post, tôi viết:

post = create(:post) 

nhưng khi tôi muốn tạo một Post được gắn thẻ với poetry, tôi viết:

post = create(:post, :poetry) 

Và nó hoạt động khá tốt.

+0

không nếu bạn có xác thực của tag_list trong hồ sơ – AndreiMotinga