我有一个名为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引擎,因此是use_route
方法的get
参数。
我唯一能想到的是RSpec不知道如何处理深深嵌套的控制器。是否有一些我应该注意的语法,以使RSpec能够正确地将其解析为控制器测试?
答案 0 :(得分:3)
您在上面发布的代码在describe块中进行了测试。通常使用Rspec将测试置于“it”块中。像:
describe Sevenpages:Public::PagesController do
describe 'GET #show' do
it 'should work' do
get :show, use_route: :sevenpages
{{ tests go here }}
end
end
end
如果您尝试这样做,方法会被正确定义吗?