0

FactoryGirlに問題があります。簡単なフォーラム アプリを作成し、トピックにタグ機能を追加しました。すべて正常に動作しますが、この機能のテストに問題があります。

これは私の工場です:

FactoryGirl.define do 
  factory :user do 
    sequence(:name)       {|n| "Person #{n}"}
    sequence(:email)      {|n| "person_#{n}@forumapp.com"}
    password              "foobar92"
    password_confirmation "foobar92"
  end
  factory :forum do 
    name "Test Forum"
    description "Test Forum Description"
  end
  factory :tag do 
    name "Test"
  end
  factory :topic do 
    name "Test Topic"
    description "Test Topic Description"
    forum 
    user
  end
  factory :post do 
    content "Lorem ipsum dolor sit amet"
    topic
    user
  end
end

私の topic_pages_spec では、次のようなことをしています:

 let(:tag) {FactoryGirl.create(:tag)}
 let(:topic){FactoryGirl.create(:topic, forum: forum, user: user, tags: tag)}

タグとトピックのデータベース スキーマは次のようになります。

create_table "taggings", force: true do |t|
    t.integer  "tag_id"
    t.integer  "topic_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "taggings", ["tag_id"], name: "index_taggings_on_tag_id", using: :btree
  add_index "taggings", ["topic_id"], name: "index_taggings_on_topic_id", using: :btree

  create_table "tags", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "topics", force: true do |t|
    t.string   "name"
    t.integer  "forum_id",    null: false
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "user_id",     null: false
    t.string   "description"
  end

私のトピックモデルは次のとおりです。

  has_many :taggings
  has_many :tags, through: :taggings  

タグ付けモデル:

  belongs_to :tag
  belongs_to :topic

タグモデル:

  has_many :taggings   has_many :topics, through: :taggings

この仕様を実行しようとすると、次のエラーが発生します。

 Failure/Error: let!(:topic){FactoryGirl.create(:topic, forum: forum, user: user, tags: tag)}
     NoMethodError:
       undefined method `each' for #<Tag:0x000000078f7210>
     # ./spec/requests/topic_pages_spec.rb:8:in `block (2 levels) in <top (required)>'

この機能をテストする方法がわかりません...

4

1 に答える 1

2

あなたが持っている-メソッド create でタグの配列を期待するhas_many :tags, through: :tagginsことを意味します。Topicあなたのケースで機能するかどうかはわかりませんが(オプションがありますthrough)、エラーは繰り返し試行にtag失敗したことを示しています。

追加してみる[]

let(:topic){FactoryGirl.create(:topic, forum: forum, user: user, tags: [tag])}
于 2013-10-04T20:07:55.897 に答える