我有一个非常简单的控制器操作,使用限制调用加载实例变量,如下所示:
def index
@questions = Question.limit(10)
end
我使用shoulda,test / unit和Mocha进行了非常简单的功能测试。
should 'limit questions returned' do
Question.expects(:limit)
get :index
end
只有当我将模拟放入测试时才会出现以下错误。到目前为止,一切都在浏览器和我的所有其他测试中工作。如果我在调用get:index之后放入模拟调用,它会像我期望的那样失败。
test: WelcomeController should limit questions returned. (WelcomeControllerTest):ActionView::Template::Error: undefined method `model_name' for NilClass:Class
app/views/welcome/index.html.erb:7:in `_app_views_welcome_index_html_erb__4244593822102250638_70180558144100'
test/functional/welcome_controller_test.rb:14:in `block in <class:WelcomeControllerTest>'
正如我所提到的。一切都通过我的集成测试工作,我可以看到这一切都在浏览器中工作。当我输入“Question.expects(:limit)”行时,我只收到错误。我希望这只是我遗漏的一些愚蠢的事情。任何帮助将不胜感激。
答案 0 :(得分:0)
我可以通过更改我的视图代码来解决此问题:
<%= render @questions %>
<% if @questions.count >= 10 %>
<h3><%= link_to 'See more ->', questions_path %></h3>
<% end %>
到此:
<% if @questions %>
<%= render @questions %>
<% if @questions.count >= 10 %>
<h3><%= link_to 'See more ->', questions_path %></h3>
<% end %>
<% end %>
如果我的控制器操作没有返回任何内容,我可能应该有这样的代码。
事实证明,这是我做的蠢事。