我有一个名为的Rails控制器,它嵌套在app/controllers/sevenpages/public/pages_controller.rbPagesController
中,如下所示:
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
在控制器主体中
我不知道还能尝试什么。我应该注意我正在使用:
- 导轨 3.2.11
- RSpec 2.12.2
我的应用程序是 Rails 引擎,因此是use_route
该方法的参数get
。
我唯一能想到的是,RSpec 不知道如何处理嵌套如此深的控制器。是否有一些我应该注意的语法以使 RSpec 能够正确地将其解析为控制器测试?