【发布时间】:2013-01-27 23:49:46
【问题描述】:
我有一个名为 PagesController 的 Rails 控制器,它嵌套在 app/controllers/sevenpages/public/pages_controller.rb 中,如下所示:
module Sevenpages
module Public
class PagesController < ApplicationController
layout nil
def show
end
end
end
end
我想使用 RSpec
测试这个控制器当我在 spec/controllers/sevenpages/pubic/pages_controller_spec.rb 中创建以下测试时:
require 'spec_helper'
describe Sevenpages:Public::PagesController do
describe 'GET #show' do
get :show, use_route: :sevenpages
{{ tests go here }}
end
end
我收到以下错误:
undefined method `get' for #<Class:0x007fe5c88e4300> (NoMethodError)
现在我明白这条错误消息的含义了。问题是 RSpec::Rails::ControllerExampleGroup 方法没有自动包含在控制器测试中,因此标准 Rails 方法,如 get、post 等在测试中不可用。
我已经尝试了所有推荐的解决方案,但没有运气。这是我尝试过的:
确保
spec/spec_helper.rb包含require 'rspec/rails'-
使用以下命令显式声明测试类型:
describe Sevenpages::Public::PagesController, type: :controller do -
使用以下命令明确包含控制器示例组:
include RSpec::Rails::ControllerExampleGroup在控制器主体中
我不知道还能尝试什么。我应该注意我正在使用:
- Rails 3.2.11
- RSpec 2.12.2
我的应用是 Rails 引擎,因此 use_route 参数是 get 方法。
我唯一能想到的是 RSpec 不知道如何处理嵌套如此深的控制器。是否有一些我应该注意的语法以使 RSpec 能够正确地将其解析为控制器测试?
【问题讨论】:
标签: ruby-on-rails rspec