Ruby on rails 使用断言和赋值进行rspec rails控制器测试

Ruby on rails 使用断言和赋值进行rspec rails控制器测试,ruby-on-rails,rspec,rspec-rails,Ruby On Rails,Rspec,Rspec Rails,我一直在使用rails 5.0.0.1,我是自动化测试新手,并使用rspec-rails-3.5.2实现了编写自动化 我想测试一些基本的控制器渲染功能和实例变量分配。 编写了一个控制器测试用例,它将检查是否呈现了get_结构模板,是否分配了所需的实例变量 describe 'GET #get_structure' do context 'get attributes to build tree structure' do let(:plan) { FactoryGirl.cr

我一直在使用rails 5.0.0.1,我是自动化测试新手,并使用rspec-rails-3.5.2实现了编写自动化

我想测试一些基本的控制器渲染功能和实例变量分配。 编写了一个控制器测试用例,它将检查是否呈现了get_结构模板,是否分配了所需的实例变量

describe 'GET #get_structure' do
    context 'get attributes to build tree structure' do
      let(:plan) { FactoryGirl.create(:plan) }

      it 'expects all keys to build structure' do
        get :get_structure, params: { id: 6, school_subdomain: 'chrys' }

        expect(response).to render_template(:get_structure)
        expect(assigns.keys.include?('collection')).to be true
        expect(assigns.keys.include?('structure')).to be true
        expect(assigns.keys.include?('config')).to be true
      end

    end
  end
运行测试用例后,我意识到由于某些安全原因,assert_模板不再受支持

命名错误: assert_模板已提取到gem。为了继续使用它, 将
gem“rails控制器测试”
添加到gem文件中

由于rspec-rails文档中提到使用rails控制器测试gem将添加回功能,所以我添加了它

在Rails5.x中,控制器测试已经转移到它自己的gem中 是rails控制器测试。在控制器规格中使用指定 如果不添加此宝石,它将不再工作

我添加了rails-controller-testing-1.0.1 gem。在rails控制器测试gem文档中还提到

rspec rails自版本起自动与此gem集成 3.5.0. 将gem添加到gem文件就足够了

但即使在添加之后,它仍然抛出相同的错误

如何解决这个问题?是否有其他方法进行控制器测试。 我为这件事绞尽脑汁已经有一段时间了。任何帮助都将不胜感激。提前感谢。

Rails:Support for Rails 5下,您可以找到测试控制器的推荐方法是请求规格

对于新的Rails应用程序:我们不建议添加 rails控制器测试gem到您的应用程序。官员 Rails团队和RSpec核心团队的建议是 改为请求规格。请求规格允许您专注于单个 控制器操作,但与涉及路由器的控制器测试不同 中间件堆栈,以及机架请求和响应。这增加了 现实主义的测试,你正在写,并帮助避免许多错误 控制器规格中常见的问题。在Rails 5中,请求规范 明显快于请求或控制器规格 在rails 4中,由于Eileen Uchitele1对rails的工作 提交人小组


请求测试也会访问视图。因此,您无需使用
assert\u template

进行测试。当您在谷歌上搜索
NoMethodError:assert\u template时,首先会出现这个问题。
这是当您尝试使用render\u template或assignment编写控制器规格或请求规格时出现的错误消息

仍然将此作为如何处理控制器和请求规范的示例。关于为什么使用请求规范而不是控制器规范的基本原理,请参见下面的答案。但我仍然不知道如何处理控制器或请求规格

答案似乎不是这样。assigns和assert_模板,这意味着使用它们是一种代码味道

与其编写一个检查是否呈现模板的测试,不如编写一个检查该模板将显示什么或响应是否成功的测试。与其编写检查是否分配了值的测试,不如检查数据库是否已更改,cookie或会话是否已分配,或者是否显示了值


对于我来说,这是一个很难理解的概念,就像许多在线教程甚至网络教程一样,但简短的回答似乎是,不要这样做。我希望这有助于其他人搜索断言模板错误消息。

谢谢@Narasima Reddy。这是一个快速的回答。我最终使用了请求规范,效果很好。编写请求规范说明中的示例包括以下内容:
expect(response)。要呈现模板(:new)
render_template
委托
assert_template
,因此您会收到一条消息,建议将rails控制器测试添加到您的文件中。是否应该请求规范而不是测试模板的呈现?