2

我想在我的应用程序控制器中测试一个获取请求,我的规范如下所示:

describe "GET some_get_method" do 
     it "should work" do
       get :some_get_method
    end
  end

但是当我这样做时,我收到以下错误:

Failure/Error: get :some_get_method
     AbstractController::ActionNotFound:
       The action 'some_get_method' could not be found for ApplicationController

我的应用程序控制器看起来像:

def some_get_method
    vari = params[:vari]

    if !vari
      render_something
      return false
    end
    true
  end

在我的路线中,我有:

namespace :application do
    get 'some_get_method/', :action => :some_get_method
  end
4

1 回答 1

1

直接为功能测试指定规范可能不合适ApplicationController,因为您真正感兴趣的是从它派生的控制器的行为。

但是,为了对 中的方法进行单元测试ApplicationController,您可以在规范文件中创建一个存根控制器(或者,更恰当地说,是一个测试助手),它除了公开您想要测试的方法之外什么都不做ApplicationController

class StubController < ApplicationController
end

您现在可以直接测试Stub的方法(真正Application的方法),而无需尝试实例化抽象类。

设置路由

如果您需要测试渲染,一种方法可能是添加 RSpec 的请求处理程序可访问的仅测试路由:

# in config/routes.rb
unless Rails.env.production?
  namespace :stub do
    get 'some_get_method', :action => :some_get_method
  end
end

# in spec
describe "GET some_get_method" do 
  it "should work" do
     get :some_get_method
     # test
  end
end
于 2012-09-19T15:53:02.053 回答