Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RSPEC-注释掉控制器操作,测试仍然通过?RubyonRails_Ruby On Rails_Ruby On Rails 4_Testing_Rspec_Controller - Fatal编程技术网

Ruby on rails RSPEC-注释掉控制器操作,测试仍然通过?RubyonRails

Ruby on rails RSPEC-注释掉控制器操作,测试仍然通过?RubyonRails,ruby-on-rails,ruby-on-rails-4,testing,rspec,controller,Ruby On Rails,Ruby On Rails 4,Testing,Rspec,Controller,我正在向已存在的应用程序添加测试。这是我的控制器: class JobsController < ApplicationController before_action :set_job, only: [:show, :edit, :update, :destroy] def index if params[:filter] @jobs = Job.order(applied_on: :asc) else @jobs = Job.

我正在向已存在的应用程序添加测试。这是我的控制器:

class JobsController < ApplicationController
  before_action :set_job, only: [:show, :edit, :update, :destroy]

   def index
     if params[:filter]
       @jobs = Job.order(applied_on: :asc)
     else
       @jobs = Job.all
     end
   end
end
如果我注释掉整个索引操作,并运行测试,它仍然通过了吗?为什么会这样

我尝试过的其他场景:

注释掉路由
resources:jobs
会导致测试失败


如何解决此问题?很明显,不管它是如何测试的,测试都是通过的,并且正确的东西没有在这里测试。

这是Rails传统优于配置的“魔力”的一部分

如果有指向控制器操作的路由,Rails将首先尝试在控制器上定位该操作。在您的情况下,它将查找
索引
操作

如果找不到,一切都不会失去。Rails假定您故意忽略了它,因为它是空白的,并且渲染相应的视图不需要特定的逻辑。脱离此默认假设,它将在控制器的视图目录(例如,
index.html.erb
)中查找匹配的模板,如果找到一个名称与控制器操作匹配的模板,它将呈现该模板


这是合理的违约。有时控制器操作只是空方法,因为它们不向视图分配任何实例变量。在这些情况下,Rails使控制器方法(操作)完全可选,这意味着连接新视图的开销更少。

ahh-当然可以。我知道如果控制器中有一个空的index方法/操作,它将查找相应的默认值(index.html.erb),我没有想到完全忽略它会产生相同的结果
require 'rails_helper'

RSpec.describe JobsController, type: :controller do
  describe "#index" do 

    it "should render index template" do 
       get(:index)
       expect(response).to render_template(:index)
    end

  end
end