我编写了一些RSpec示例来测试由控制器生成的呈现HTML的各个方面。这些包括......
it "should be successful" do
get :show, :section => @section.slug
response.should be_success
end
it "should have the right title" do
get :show, :section => @section.slug
response.should have_selector("title", :content => @section.name)
end
it "should find the right section" do
get :show, :section => @section.slug
assigns(:section).should == @section
end
这些正在测试SectionsController#show
。当我在浏览器中导航到该页面时,它会完美呈现,没有异常。但是,RSpec会返回(对于所有三个人,请注意):
Failure/Error: get :show, :section => @section.slug
ActionView::Template::Error
对于所有测试,这显然在get :show, :section => @section.slug
行上失败。
我已将问题缩小到一个部分。在此操作的视图文件中,我包含了部分
<%= render 'popular' %>
...当删除此行时,所有测试都通过。这部分的相关内容是:
<div class="most_popular group">
<%= render post_excerpt(@popular.shift, :class => "one") %>
</div><!-- end most popular -->
post_excerpt是我写的一个帮助器方法,用于将一些参数作为哈希值传递给render
。
def post_excerpt(post, options)
{ :partial => 'posts/post_excerpt', :object => post, :as => :post, :locals => { :klass => options[:class] } }
end
部分'posts / post_excerpt':
<article class="<%= klass if klass %>">
<h2><%= link_to post.name, section_post_path(post.section, post) %></h2>
<footer>By <%= link_to post.author.name, post.author %></footer>
<hr />
<div class="content">
<%= raw(post.excerpt) %>
</div><!-- end content -->
</article>
我正在运行RSpec 2.4.0和Rails 3.0.3。如果需要,我可以提供更多详细信息或代码片段,但我认为这已经足够了。
如果你知道可能导致这个奇怪问题的原因,请发布!谢谢!