2011-12-03 113 views
3

对于我的视图,我有一个rspec测试,在我使用draper抽取某些逻辑之前,它工作正常。该视图在浏览器中呈现正确,但现在测试失败。使用rspec测试Draper增强模型使用rspec测试Draper增强模型

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 

该视图包含的装饰方法calendars,这在装饰/ article_decorator.rb定义的电话,但因为我使用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)>' 

我如何使我的测试再次工作? (或者是有测试我的意见的更好的办法?)

回答

1

我还没有开始使用德雷珀,但是我想这应该工作:

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方法。