投稿モデルとタグモデルの間には多対多の関連があり ます。次に、投稿ビューに次のように表示されます。
posts / show.html.erb:
<p><%= raw @post.tags.map { |t| link_to t.name, tag_path(t.name) }.join(', ') %></p>
これは私が書いた仕様です:
post_pages_spec.rb:
describe "show page" do
let!(:post) { FactoryGirl.create(:post, user: user,
title: "Lorem",
content: "Lorem ipsum",
category_id: category.id,
tag_list: "#{tag.id}") }
before do
sign_in user
visit post_path(post)
end
it { should have_selector('h1', text: post.title) }
it { should have_selector('title', text: post.title) }
it { should have_link(post.user.name, href: user_path(user)) }
it { should have_selector('p', text: post.content) }
it { should have_selector('p', text: post.category.name) }
it { find("p").should have_content(post.tags.map { |t| t.name }.join(", ")) }
.
.
.
このエラーが発生します:
失敗:
1)投稿ページの表示ページの失敗/エラー:it {find( "p")。should have_content(post.tags.map {| t | t.name} .join( "、"))}コンテンツがあると予想される " 1、tag28 "in" Lorem ipsum "#./ spec/requests/post_pages_spec.rb:28:in`ブロック(3レベル)in '
コードは実際のサイトで機能しますが、ご覧のとおり、仕様は失敗しています。この仕様を書く正しい方法は何ですか?
編集:
ポストモデルの例(念のため):
class Post < ActiveRecord::Base
include ActionView::Helpers
attr_accessible :title, :content, :category_id, :tag_list
has_many :taggings, :dependent => :destroy
has_many :tags, :through => :taggings
.
.
.
ライブサイトからの出力:
<p><a href="/tags/inkscape">inkscape</a>, <a href="/tags/gimp">gimp</a></p>