3

ドレーパーを使用してロジックの一部を抽象化する前に、正常に機能したビューの rspec テストがあります。ビューはブラウザーで正しくレンダリングされますが、テストは失敗します。

require 'spec_helper'

describe "articles/index.html.erb" do
  before(:each) do
    assign(:articles, [
      stub_model(Article,
        :title => "Title",
        :slug => "this-is-a-slug",
        :content => "Content",
        :excerpt => "Excerpt",
        :starts_at => "2012-01-10 01:00:00",
        :ends_at => "2012-01-10 01:30:00",
        :show_times => true
      )
    ])
    render
  end

  it "renders a list of articles" do
    assert_select "h3", :text => "Title".to_s, :count => 8
    assert_select "div.article_body", :text => "Content".to_s, :count => 8
  end
end

ビューには、decorators/article_decorator.rb で定義されているデコレータ メソッドへの呼び出しが含まれていますがcalendars、おそらく stub_model を使用しているため、rspec はこれを検出していません。

1) articles/index.html.erb renders a list of articles
   Failure/Error: render
   ActionView::Template::Error
   undefined method `calendars' for #<Article:0x007fd41c68be90>
   # ./app/views/articles/index.html.erb:4:in `block in _app_views_articles_index_html_erb___1865228919968458103_70274492660680'
   # ./app/views/articles/index.html.erb:1:in `each'
   # ./app/views/articles/index.html.erb:1:in `_app_views_articles_index_html_erb___1865228919968458103_70274492660680'
   # ./spec/views/articles/index.html.erb_spec.rb:85:in `block (2 levels) in <top (required)>'

テストを再び機能させるにはどうすればよいですか? (または、私のビューをテストするより良い方法はありますか?)

4

1 に答える 1

1

私はまだDraperを使い始めていませんが、これでうまくいくはずです:

assign(:articles, [
    ArticleDecorator.new(
      stub_model(Article,
        :title => "Title",
        :slug => "this-is-a-slug",
        :content => "Content",
        :excerpt => "Excerpt",
        :starts_at => "2012-01-10 01:00:00",
        :ends_at => "2012-01-10 01:30:00",
        :show_times => true
        )
      )])

calendars記事は、メソッドに応答するデコレータの配列になりました。

于 2012-01-25T11:03:02.420 に答える