RSPEC - 评论控制器动作,测试仍然通过? Ruby on Rails

时间:2015-09-17 02:10:59

标签: 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.all
     end
   end
end

这是我的spec文件:

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

如果我注释掉整个索引操作,并运行测试它仍然通过?这是为什么?

我试过的其他场景:

注释掉路线resources :jobs会使测试失败

我该如何解决这个问题?很明显,无论测试结果如何,测试都会通过,而且这里没有测试正确的测试。

1 个答案:

答案 0 :(得分:2)

这是Rails&#39;魔法&#39;的一部分。约定优于配置。

如果您的路由指向控制器操作,Rails将首先尝试在控制器上找到该操作。在您的情况下,它会查找index操作。

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

这是明智的默认值。有时控制器操作只是空方法,因为它们不会将任何实例变量分配给视图。在这些情况下,Rails使控制器方法(动作)完全可选,这意味着连接新视图的开销更少。