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