在功能测试中使用Mocha并获取ActionView :: Template :: Error:NilClass:Class的未定义方法`model_name'

时间:2012-01-31 01:02:19

标签: ruby-on-rails mocha

我有一个非常简单的控制器操作,使用限制调用加载实例变量,如下所示:

  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)”行时,我只收到错误。我希望这只是我遗漏的一些愚蠢的事情。任何帮助将不胜感激。

1 个答案:

答案 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 %>

如果我的控制器操作没有返回任何内容,我可能应该有这样的代码。

事实证明,这是我做的蠢事。