2

次のヘルパーをテストする必要があります。

def display_all_courses
  @courses = Course.all

  output =  ""

  for course in @courses do
    output << content_tag(:li, :id => course.title.gsub(" ", "-").downcase.strip) do
      concat content_tag(:h1, course.title)
      concat link_to("Edit", edit_course_path(course))
    end
  end

  return output
end 

この出力をテストできる方法があるかどうか疑問に思っています。基本的に、ヘルパーが正しい数の li 要素を取得することをテストしたいだけです。おそらく、コースがない場合に当てはまります。

私の最初の考えは、次のようなことをすることです:

describe DashboardHelper do
  describe display_all_courses do
    it "should return an list of all the courses" do
      7.times{Factory(:course)
      html = helper.display_all_courses
      html.should have_selector(:li)
    end
  end
end

これはうまく機能します。ただし、 have_selector 呼び出しに :count オプションを追加すると、突然失敗します。その理由を理解できる人はいますか?

4

3 に答える 3

5

あなたが探していたのはhave_tagとwith_tagのRSpecヘルパーだったと思います

describe DashboardHelper do
  describe display_all_courses do
    it "should return an list of all the courses" do
      7.times{ Factory(:course) }
      helper.display_all_courses.should have_tag('ul') do
        with_tag('li', 3)
      end
    end
  end
end
于 2012-05-25T21:33:45.623 に答える
1

多分それはhtmlをxmlとして扱うのを助けるかもしれませんか?その場合、このリンクが役立つ可能性があります。

have_xmlそれはあなたがまさに必要とするものであるかもしれないマッチャーを定義します。私は理解していますがhave_tag、文字列でも機能する方がいいでしょう。

于 2010-08-23T12:08:40.990 に答える
-8

明らかに、テンプレートはこれを行うための最良の方法です。

于 2010-09-10T23:34:55.233 に答える